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


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

    添加对服务的服务引用

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

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

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

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

    构造服务的代理

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

      using System.ServiceModel;
      using SilverlightApplication1.ServiceReference1;
      

      2. 在使用服务之前,必须先实例化 Web 服务代理。例如,可以在 MainPage() 构造函数的作用域中执行此操作。

        CustomerServiceClient proxy = new CustomerServiceClient();
    在 Web 服务上调用操作
    1. Silverlight 中的所有 Web 服务调用都是异步的。对于服务中的每个操作,代理都包含两个成员:一个异步方法和一个已完成的事件。例如,考虑 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;
    }
    }
    }
    }

  • 相关阅读:
    内存 : CL设置
    联通积分兑换的Q币怎么兑换到QQ上
    DB2数据库表追加字段
    显示菜单项与按钮项的关联关系
    如何将Windows8系统的磁盘格式(GPT格式)转换成Windows 7系统的磁盘格式(MBR格式)
    索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
    SqlServer之数据库三大范式
    Python并发编程-Redis
    Python并发编程-Memcached (分布式内存对象缓存系统)
    Python并发编程-RabbitMQ消息队列
  • 原文地址:https://www.cnblogs.com/landexia/p/1991917.html
Copyright © 2020-2023  润新知