科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件Vista新技术:WCF开发指南之客户端开发

Vista新技术:WCF开发指南之客户端开发

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

为了调用服务上的操作,客户端首先需要把服务合同导入到客户端的本地描述中

作者:朱先忠编译 来源:天极开发 2007年11月3日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三. 创建和使用代理

  SvcUtil生成的代理类派生自类ClientBase<T>,定义为:

public class ClientBase<T> : IDisposable
{
 protected ClientBase(string endpointConfigurationName);
 protected ClientBase(Binding binding,EndpointAddress remoteAddress);
 public void Close();
 public void Dispose();
 protected T InnerProxy{get;}
 //其它成员
}

  这个InnerProxy属性是客户端需要消费的合同类型,并且SvcUtil生成的ClientBase<T>的子类简单地把它代理到方法调用(见列表5)。客户端需要实例化一个代理对象并且提供给其构造器端点信息-或者是来自配置文件的端点节名(见列表6)或者是在不使用一个配置文件时的端点地址和绑定对象。然后,该客户端可以使用代理方法来调用该服务,并且客户端完成后,它需要关闭该代理实例:

MyContractProxy proxy = new
MyContractProxy("MyEndpoint");
proxy.MyMethod();
proxy.Close();

  关闭代理将终止与服务的会话并且关闭连接。作为选择,你可以使用代理的Dispose()方法来关闭它。Dispose()方法的优点在于,你可以使用using语句来调用它,即使在面临异常处理时:

using(MyContractProxy proxy = new MyContractProxy("MyEndpoint"))
{
 proxy.MyMethod();
}

  在客户端配置文件中的每个合同类型的一个端点可以被指派为一个默认端点。默认端点是一个没有名字标志或只有一个空名("")的端点节:

<system.serviceModel>
<client>
<endpoint
...
contract="IMyContract"
/>
<endpoint name="OtherEndpoint"
...
contract="IMyContract"
/>
</client>
</system.serviceModel>

  一个默认的端点仅仅是一种理想情况;当创建一个针对默认端点的代理时,你可以使用代理的默认构造器来让它使用默认端点:

MyContractProxy proxy = new MyContractProxy();
proxy.MyMethod();
proxy.Close();

  四. 可编程的客户端配置

  不依赖于配置文件,客户端也可以通过编程方式来构建端点并且把它提供给代理构造器。列表9(见本文相应下载源码)展示了这一技术,其中展示了等价于列表6中的代码(针对列表2中的服务)。编程配置是很有用的:当端点决策或者是完全动态的-基于当前输入或在运行时刻使用;或当决策是静态的且从不更改时,你最好采用硬编码之。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章