WCF 三步曲(中) WCF的客户使用

 WCF的客户端使用

上一篇说的是入门,一个WCF程序是什么样的,这一篇客户端应用如何配置创建和使用WCF服务。

WCF客户端一般应包括以下一些内容

和服务端商量好的contractendpoint

创建客户端代理

调用服务操作

关闭服务调用资源

 

       如何创建客户端代理

         发布了一个服务以后,可以用ServiceModel Metadata Utility Tool创建客户端代理,如服务地址为为:http://zycblog/Service/Service.svc?wsdl,可以通过以下命令行创建客户端代理

         svcutil /language:vb /out:ClientCode.vb /config:app.config http://zycblog /Service/Service.svc?wsdl

        俱体的操作步骤就不详述了,类似的文章很多。

    一个客户端代理是一个本地对像,通过他可以WCF服务通信,我们可通过Visual Studio来创建代理,方法是在项目里添加Service Reference。完了以后示例如下

 

[System.ServiceModel.ServiceContractAttribute(
  Namespace 
=   " http://microsoft.wcf.documentation "
)]
public   interface  ISampleService
{
    [System.ServiceModel.OperationContractAttribute(
      Action 
=   " http://microsoft.wcf.documentation/ISampleService/SampleMethod " ,
      ReplyAction 
=   " http://microsoft.wcf.documentation/ISampleService/SampleMethodResponse "
    )]
    [System.ServiceModel.FaultContractAttribute(
      
typeof (microsoft.wcf.documentation.SampleFault),
      Action 
=   " http://microsoft.wcf.documentation/ISampleService/SampleMethodSampleFaultFault "
    )]
    
string  SampleMethod( string  msg);
}

在创建客户端代理时,请注意客户端的配置文件,特别是endpoint,其配置里包含了contract,binding,address.常见的示例 如下 

< configuration >
    
< system.serviceModel >
        
< bindings >
            
< wsHttpBinding >
                
< binding  name ="WSHttpBinding_ISampleService"  closeTimeout ="00:01:00"
                    openTimeout
="00:01:00"  receiveTimeout ="00:01:00"  sendTimeout ="00:01:00"
                    bypassProxyOnLocal
="false"  transactionFlow ="false"  hostNameComparisonMode ="StrongWildcard"
                    maxBufferPoolSize
="524288"  maxReceivedMessageSize ="65536"
                    messageEncoding
="Text"  textEncoding ="utf-8"  useDefaultWebProxy ="true"
                    allowCookies
="false" >
                    
< readerQuotas  maxDepth ="32"  maxStringContentLength ="8192"  maxArrayLength ="16384"
                        maxBytesPerRead
="4096"  maxNameTableCharCount ="16384"   />
                    
< reliableSession  ordered ="true"  inactivityTimeout ="00:10:00"
                        enabled
="false"   />
                    
< security  mode ="Message" >
                        
< transport  clientCredentialType ="None"  proxyCredentialType ="None"
                            realm
=""   />
                        
< message  clientCredentialType ="Windows"  negotiateServiceCredential ="true"
                            algorithmSuite
="Default"  establishSecurityContext ="true"   />
                    
</ security >
                
</ binding >
            
</ wsHttpBinding >
        
</ bindings >
        
< client >
            
< endpoint  address ="http://localhost:8080/SampleService"  binding ="wsHttpBinding"
               bindingConfiguration
="WSHttpBinding_ISampleService"  contract ="ISampleService"
                name
="WSHttpBinding_ISampleService" >
            
</ endpoint >
        
</ client >
    
</ system.serviceModel >
</ configuration >
 

调用操作

当客户端代理创建好,并配置好以后,就可以通过代理来调用WCF服务了,调用完毕需注意关闭调用,

下面用示例来说明,假如 contraact代码如下 

namespace Microsoft.ServiceModel.Samples

{
    using System;
    using System.ServiceModel;
    [ServiceContract(Namespace = http://microsoft.servicemodel.samples/)]
    public interface ICalculator
   {
        [OperationContract]
        double Add(double n1, double n2);
        [OperationContract]
        double Subtract(double n1, double n2);
        [OperationContract]
        double Multiply(double n1, double n2);
        [OperationContract]
        double Divide(double n1, double n2);
    }
}
 

调用代码如下 

CalculatorClient wcfClient = new CalculatorClient();
try
{
    Console.WriteLine(wcfClient.Add(4, 6));
    wcfClient.Close();
}
catch (TimeoutException timeout)
{
    // Handle the timeout exception.
    wcfClient.Abort();
}
catch (CommunicationException commException)
{
    // Handle the communication exception.
    wcfClient.Abort();
}

 

 

你可能感兴趣的:(WCF)