在添加服务引用而不是Web引用时,在Silverlight中使用Webservice类

时间:2009-10-21 11:49:36

标签: c# asp.net silverlight web-services silverlight-3.0

情境:

我使用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中获得这两个类,而不是使用那些请求响应类型。

2 个答案:

答案 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服务!