zoukankan      html  css  js  c++  java
  • 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();
    }

     

     

  • 相关阅读:
    [luogu p2482] [SDOI2010]猪国杀
    [luogu p2296] 寻找道路
    左右布局(备用复制)
    导出Excel
    流式布局 及 媒体查询
    echarts设置(持续更新)
    解决Vue中watch首次进入路由不触发的问题
    Math.random
    Vue的拖拽
    使的dialog上下左右居中(弹框居中)
  • 原文地址:https://www.cnblogs.com/zycblog/p/2131153.html
Copyright © 2011-2022 走看看