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();
}

 

 

posted @ 2011-08-08 17:20  赵一村  阅读(535)  评论(0编辑  收藏  举报