挖掘创建使用WCF代理技巧

WCF代理还是比较常用的,于是我研究了一下WCF代理,在这里拿出来和大家分享一下,希望对大家有用。SvcUtil生成的代理类派生自类ClientBase<T>,定义为:

 
 
  1. public class ClientBase<T> : IDisposable  
  2. {  
  3. protected ClientBase(string endpointConfigurationName);  
  4. protected ClientBase(Binding binding,EndpointAddress remoteAddress);  
  5. public void Dispose();  
  6. protected T InnerProxy{get;}  
  7.  //其它成员  

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

 
 
  1. MyContractProxy proxy = new 
  2. MyContractProxy("MyEndpoint");  
  3. proxy.MyMethod();  
  4. proxy.Close(); 

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

 
 
  1. using(MyContractProxy proxy = new MyContractProxy("MyEndpoint"))  
  2. {  
  3. proxy.MyMethod();  

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

 
 
  1. <system.serviceModel> 
  2. <client> 
  3. <endpoint 
  4. ...  
  5. contract="IMyContract" 
  6. /> 
  7. <endpoint name="OtherEndpoint" 
  8. ...  
  9. contract="IMyContract" 
  10. /> 
  11. </client> 
  12. </system.serviceModel> 

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

 
 
  1. MyContractProxy proxy = new MyContractProxy();  
  2. proxy.MyMethod();  
  3. proxy.Close();  
THE END