情境:
我使用Silverlight 3.0作为Web服务的客户端。
设计
服务器有一个名为 DeviceInfoService 的类,它具有获取设备列表,获取设备属性等基本功能。
当我打开一个ASP.NET项目并尝试添加Web引用时,我可以找到一个添加“Web引用”的选项。在我以这种方式添加Web引用之后,我可以通过创建它的对象然后访问它的方法来访问DeviceInfoService类。
网络参考v / s服务参考:
来到Silverlight:当我尝试添加服务引用时,没有添加Web引用的选项。使用服务参考,一切正常,直到下载WSDL文件。人们说我可以通过回到.NET 2.0来获得这个选项,但可能Silverlight在.NET 2.0中不起作用
问题
现在,当我尝试访问DeviceInfoService类时,我无法找到它。我得到的只是Interfaces - DeviceInfoServiceSoap和DeviceInfoServiceSoapChannel。名为DeviceInfoServiceSoapClient的类。
方法GetHostedDevices和GetDeviceInfo不再可用。我得到的只是GetDeviceInfoRequest,GetDeviceInfoRequestBody,GetDeviceInfoResponse和GetDeviceInfoResponseBody。
我搜索了很多如何使用这四个类,却什么也没找到。我希望直接在ASP.NET中获得这两个类,而不是使用那些请求响应类型。
答案 0 :(得分:2)
你听起来很混乱一些概念。
您如何观看以下Silverlight.Net视频,看看是否有帮助? How to Consume WCF and ASP.NET Web Services in Silverlight
答案 1 :(得分:1)
ASP.NET中的Web引用与Silverlight中的服务引用等效。
以下是如何在Silverlight中使用Web服务的示例,例如: CDYNE Profanity Filter。
向项目添加新的服务参考,URL为:http://ws.cdyne.com/ProfanityWS/Profanity.asmx?wsdl,将名称保留为ServiceReference1。
使用此代码来调用服务(实现为异步):
public MainPage()
{
InitializeComponent();
string badText = "I wonder if the filter will filter this out: shit bad luck";
ServiceReference1.ProfanitySoapClient client = new ServiceReference1.ProfanitySoapClient();
client.ProfanityFilterCompleted += new EventHandler<ServiceReference1.ProfanityFilterCompletedEventArgs>(client_ProfanityFilterCompleted);
client.ProfanityFilterAsync(badText, 0, false);
}
void client_ProfanityFilterCompleted(object sender, ServiceReference1.ProfanityFilterCompletedEventArgs e)
{
string cleanText = e.Result.CleanText; // Web service callback is here
}
你已经在Silverlight中启动并运行了一个Web服务!