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 Files\Microsoft SDKs\Windows\v6.0A\bin:找到svcutil.exe文件。开始菜单-->run --> input cmd --->cd C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin -->回车;

输入svcutil http://localhost:8080/service/service.asmx,将会在C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin生成一个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

(转)wcf client与webservice通信(-)只修改配置文件而改变服务端的更多相关文章

  1. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

  2. c++ 网络编程(二) linux 下多进程socket通信 多个客户端与单个服务端交互代码实现回声服务器

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9612820.html 锲子-- 预备知识优雅的关闭套接字连接: 基于TCP的半关闭 TCP中的 ...

  3. webservice快速入门-使用wsimport生成ws服务端(二)

    上个例子演示的是在当前项目下发布的Webservice Server,而实际应用中和Client是分离的,本文介绍两种客户端开发方式: 1.导出WebService服务端服务接口到jar包,客户端引入 ...

  4. socket 通信 入门3 android 客户端 C# 服务端

    这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的... 当然这里是未完成的  只是简单展示一下大致思路 首先连接建立起来后  服务端给客户端一条信息  告诉 ...

  5. 【修改端口号】linux下修改apache,nginx服务端口号

    一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...

  6. iredmail邮件服务器之修改默认的web服务端口号

    安装iredmail之后,由于需要在路由器上做端口映射以便在外网访问webmail,因此端口不能和WEB服务的端口好冲突,所以需要修改邮件服务器的httpd服务的端口. 一.apache/httpd的 ...

  7. linux下修改apache,nginx服务端口号

    一.linux下修改apache端口号 yum安装后,apache配置文件: /etc/httpd/conf/httpd.conf 找到apache目录下的 httpd.conf, 使用vi 打开,找 ...

  8. HttpClient由Client客户端上传File文件流至Server服务端

    客户端方法 public static void main(String[] args) { File file=new File("E:\\lucene\\rev\\全年平台受理量.doc ...

  9. 我的WCF之旅(3):在WCF中实现双工通信

    双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...

随机推荐

  1. NHibernate之映射文件配置说明(转载2)

    六.鉴别器   在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段. 鉴别器字段包含标志值,用于告知持久化层应 ...

  2. Resharper

    http://baike.baidu.com/link?url=H8DVtrvKV1Cg-Hrz82C6ZiJOUXbi_3BfoROe-RlHhctPna4-BFfglPh2OsR-KmCqRZ7_ ...

  3. 2.RxJava详解网址http

    RxJava 到底是什么 RxJava 好在哪 API 介绍和原理简析 1) Scheduler 的 API (二) 2) Scheduler 的原理(二) 3) 延伸:doOnSubscribe() ...

  4. Java_观察者模式(Observable和Observer) -转

    原文地址: Java_观察者模式(Observable和Observer) 一.观察者模式介绍    在Java中通过Observable类和Observer接口实现了观察者模式.一个Observer ...

  5. 在同个类中non-const插入const来减少重复

    class A { private: std::string a; public: A(std::string b) :a(b){} const char& operator[](int b) ...

  6. 转载:对#!/bin/sh的认识

    转载网址:http://blog.163.com/hashes@yeah/blog/static/16867631220101029847420/ 对#!/bin/sh的认识 第一次学shell编程, ...

  7. python学习第十一天 -- 函数式编程

    在介绍函数式编程之前,先介绍几个概念性的东西. 什么是函数式编程? 函数式编程的特点: 1.把计算视为函数而非指令; 2.纯函数式编程:不需要变量,没有副作用,测试简单; 3.支持高阶函数,代码简洁. ...

  8. HTML&CSS基础学习笔记1.13—无序列表

    无序列表 有时我们的工作繁忙,杂事很多,怕忘记,就会把事情一件件列出来,防止忘记. 它们的排列顺序对于我们来说并不重要,可以随意调换,我们将它称为无序列表,HTML里用<ul>标签来表示无 ...

  9. Python中unittest采用不同的参数组合产生独立的test case

    我们在使用Python的unittest做自动化或者单元测试时,有时需要一个测试用例根据不同的输入.输出组合而执行多次,但是,unittest中一个用例只能有一组参数组合执行,如果采用循环的方式,在生 ...

  10. AngularJS自定义表单验证

    <!doctype html> <html ng-app="myApp"> <head> <script src="G:\\So ...