• (转)wcf client与webservice通信(-)只修改配置文件而改变服务端


    http://www.cnblogs.com/yiyisawa/archive/2008/12/16/1356191.html

    问题: 假设有一个大型系统新版本使用wcf 作为服务端,生成wcf client 调用可以调用正常。 那如果当wcf 服务端出现问题或其他的原因我想再用回以前老版本的webservice或是jms server ,但客户端调用还是通过wcf client 调用。只通过更改配置来实现。

     一、web service项目,添加一个普通service class .代码如下:


    Code
    [WebService(Namespace="http://Microsoft.ServiceModel.Samples")]
        public class CalculatorService : System.Web.Services.WebService
        {        
            [WebMethod]
            public double Add(double n1, double n2)
            {
                return n1 + n2;
            }
            [WebMethod]
            public double Subtract(double n1, double n2)
            {
                return n1 - n2;
            }
            [WebMethod]
            public double Multiply(double n1, double n2)
            {
                return n1 * n2;
            }
            [WebMethod]
            public double Divide(double n1, double n2)
            {
                return n1 / n2;
            }
        } 

    webservice配置文件无需更改。运行。记录服务地址。

    二、打开路径C:Program FilesMicrosoft SDKsWindowsv6.0Ain:找到svcutil.exe文件。开始菜单-->run --> input cmd --->cd C:Program FilesMicrosoft SDKsWindowsv6.0Ain -->回车;

    输入svcutil http://localhost:8080/service/service.asmx,将会在C:Program FilesMicrosoft SDKsWindowsv6.0Ain生成一个webservice的代理类。注意:此代理类是wcf client形式的。(在后面只需将这个代理类小作改动,便可用于wcf sevice.)

    生成的代理类:


    //------------------------------------------------------------------------------
    // <auto-generated>
    //     This code was generated by a tool.
    //     Runtime Version:2.0.50727.3053
    //
    //     Changes to this file may cause incorrect behavior and will be lost if
    //     the code is regenerated.
    // </auto-generated>
    //------------------------------------------------------------------------------



        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
        [System.ServiceModel.ServiceContractAttribute(Namespace = "http://Microsoft.ServiceModel.Samples", ConfigurationName = "CalculatorServiceSoap")]
        public interface CalculatorServiceSoap
        {

            [System.ServiceModel.OperationContractAttribute(Action = "http://Microsoft.ServiceModel.Samples/Add", ReplyAction = "*")]
            double Add(double n1, double n2);

            [System.ServiceModel.OperationContractAttribute(Action = "http://Microsoft.ServiceModel.Samples/Subtract", ReplyAction = "*")]
            double Subtract(double n1, double n2);

            [System.ServiceModel.OperationContractAttribute(Action = "http://Microsoft.ServiceModel.Samples/Multiply", ReplyAction = "*")]
            double Multiply(double n1, double n2);

            [System.ServiceModel.OperationContractAttribute(Action = "http://Microsoft.ServiceModel.Samples/Divide", ReplyAction = "*")]
            double Divide(double n1, double n2);
        }

        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
        public interface CalculatorServiceSoapChannel : CalculatorServiceSoap, System.ServiceModel.IClientChannel
        {
        }

        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")]
        public partial class CalculatorServiceSoapClient : System.ServiceModel.ClientBase<CalculatorServiceSoap>, CalculatorServiceSoap
        {

            public CalculatorServiceSoapClient()
            {
            }

            public CalculatorServiceSoapClient(string endpointConfigurationName)
                :
                    base(endpointConfigurationName)
            {
            }

            public CalculatorServiceSoapClient(string endpointConfigurationName, string remoteAddress)
                :
                    base(endpointConfigurationName, remoteAddress)
            {
            }

            public CalculatorServiceSoapClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress)
                :
                    base(endpointConfigurationName, remoteAddress)
            {
            }

            public CalculatorServiceSoapClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress)
                :
                    base(binding, remoteAddress)
            {
            }

            public double Add(double n1, double n2)
            {
                return base.Channel.Add(n1, n2);
            }

            public double Subtract(double n1, double n2)
            {
                return base.Channel.Subtract(n1, n2);
            }

            public double Multiply(double n1, double n2)
            {
                return base.Channel.Multiply(n1, n2);
            }

            public double Divide(double n1, double n2)
            {
                return base.Channel.Divide(n1, n2);
            }
        }

    三、添加Console Application,将上面生成的代理类加入项目中,并在Main方法中调用。


     Service1Clients client = new Service1Clients();

               //   Service1Client client = new Service1Client();
                // Call the Add service operation.
                double value1 = 100.00D;
                double value2 = 15.99D;
                
                
                
                
                double result = client.Add(value1, value2);
                Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);

                // Call the Subtract service operation.
                value1 = 145.00D;
                value2 = 76.54D;
                result = client.Subtract(value1, value2);
                Console.WriteLine("Subtract({0},{1}) = {2}", value1, value2, result);

                // Call the Multiply service operation.
                value1 = 9.00D;
                value2 = 81.25D;
                result = client.Multiply(value1, value2);
                Console.WriteLine("Multiply({0},{1}) = {2}", value1, value2, result);

                // Call the Divide service operation.
                value1 = 22.00D;
                value2 = 7.00D;
                result = client.Divide(value1, value2);
                Console.WriteLine("Divide({0},{1}) = {2}", value1, value2, result);

                //Closing the client gracefully closes the connection and cleans up resources
                client.Close();

                Console.WriteLine();
                Console.WriteLine("Press <ENTER> to terminate client.");
                Console.ReadLine();

    添加配置文件:App.config.此配置文件在二步生成代理类的时候会有Out.config同时产生。config里面的内容拷过来即可。


    <system.serviceModel>
        
         <bindings>
          <basicHttpBinding>
            <binding name="CalculatorServiceSoap" closeTimeout="00:01:00"
                openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
                allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                useDefaultWebProxy="true">
              <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                  maxBytesPerRead="4096" maxNameTableCharCount="16384" />
              <security mode="None">
                <transport clientCredentialType="None" proxyCredentialType="None"
                    realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        
        </bindings>
        <client>
          
          <endpoint address="http://localhost:8080/service/service.asmx"
             binding="basicHttpBinding"
             contract="IService1" name="IService1" />
        </client>
      </system.serviceModel>

     将webservice运行起来,(也可host到iis 里去。)debug console application.即可看到结果。

    回家吃饭了。

    细节和要注意的地方在第二节中写出来。

    项目下载地址:http://files.cnblogs.com/yiyisawa/wcfclienttowebservice.rar

  • 相关阅读:
    hadoop yarn日志分离
    hadoop优化
    hive UDF
    hadoophttpfs
    spark编译
    spark feature
    python
    python 装饰器
    HTML特殊转义字符列表
    博客园数据统计
  • 原文地址:https://www.cnblogs.com/wanshutao/p/3904572.html
Copyright © 2020-2023  润新知