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

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

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

ContractedBlock.gif ExpandedBlockStart.gif Code
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.)

生成的代理类:

 

ContractedBlock.gif ExpandedBlockStart.gif Code
//------------------------------------------------------------------------------
// 
//     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.
// 
//------------------------------------------------------------------------------



    [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方法中调用。

 

ContractedBlock.gif ExpandedBlockStart.gif Code
 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  to terminate client.");
            Console.ReadLine();

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

 

ContractedBlock.gif ExpandedBlockStart.gif Code
<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

 

 

 

转载于:https://www.cnblogs.com/yiyisawa/archive/2008/12/16/1356191.html

你可能感兴趣的:(wcf client与webservice通信(-)只修改配置文件而改变服务端)