您的位置:首页 > 其它

在Silverligh中访问Web服务 - 从 Silverlight 访问服务

2011-03-22 22:21 387 查看
代理是帮助您访问特定服务的类。可以使用 Visual Studio 2010 中的"添加服务引用"工具自动生成该代理;或者,可以使用从目标服务收到的服务元数据文档借助 Silverlight 服务模型代理生成工具 (SLsvcutil.exe) 生成该代理

添加对服务的服务引用

右键单击"解决方案资源管理器"中的 SilverlightApplication1
项目,然后选择"添加服务引用"

单击"发现"找到在如何:为 Silverlight
客户端生成服务过程中创建的 CustomerService.svc。它应该出现在"服务"框中。

接受"命名空间"字段中的 ServiceReference1
并单击"确定"

请注意,现在"解决方案资源管理器"中已经添加了一个名为"服务引用"的文件夹。通过右键单击并选择"在对象浏览器中查看",可以在该文件夹中找到
ServiceReference1。请注意,它包含了
SilverlightApplication1.ServiceReference1.CustomerServiceClient
类及其方法。这些方法用于调用服务。

构造服务的代理

转到客户端应用程序中的 MainPage.xaml.cs(代码隐藏)文件,并在页面顶部添加以下 using 语句:

using System.ServiceModel;
using SilverlightApplication1.ServiceReference1;


  2. 在使用服务之前,必须先实例化 Web 服务代理。例如,可以在
MainPage()

构造函数的作用域中执行此操作。

    CustomerServiceClient proxy = new CustomerServiceClient();
在 Web 服务上调用操作
1. Silverlight 中的所有 Web 服务调用都是异步的。对于服务中的每个操作,代理都包含两个成员:一个异步方法和一个已完成的事件。例如,考虑 [code]CountUsers
服务操作。
我们首先在
MainPage()
构造函数的作用域中将
EventHandler
添加到
CountUsersCompleted
。当服务返回我们请求的数据时,将调用此事件。在设置事件后,我们就可
以通过调用
CountUsersAsync
来调用该服务。
2.
MainPage()
构造函数作用域内
GetUsers
服务操作的异步方法和已完成事件所需的代理成员如下
3. 事件处理程序指定应在该服务返回某些数据时调用
proxy_CountUsersCompleted
方法。我们需要以一种能够可靠处理错误的方式在
MainPage
类的作用域内定义此方法。
要处理错误情况,您必须在访问 Result 属性前通过检查最终事件参数的 Error 属性检测错误。如果在出现错误情况时尝试访问 Result 属性,将引发异常。
示例
//MainPage.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ServiceModel; using SilverlightApplication1.ServiceReference1;
namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
// Required to initialize variables
InitializeComponent();

CustomerServiceClient proxy = new CustomerServiceClient();

proxy.CountUsersCompleted += new EventHandler< CountUsersCompletedEventArgs>(proxy_CountUsersCompleted);
proxy.CountUsersAsync();

proxy.GetUserCompleted += new EventHandler< GetUserCompletedEventArgs>(proxy_GetUserCompleted);
proxy.GetUserAsync(1);
}

void proxy_GetUserCompleted(object sender, GetUserCompletedEventArgs e)
{
if (e.Error != null)
{
getUserResult.Text = "Error getting the user.";
}
else
{
getUserResult.Text = "User name: " + e.Result.Name + ", age: " + e.Result.Age + ", is member: " + e.Result.IsMember;
}
}

void proxy_CountUsersCompleted(object sender, CountUsersCompletedEventArgs e)
{
if (e.Error != null)
{
userCountResult.Text = "Error getting the number of users.";
}
else
{
userCountResult.Text = "Number of users: " + e.Result;
}
}
}
}


[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: