WCF 调用webservice
http://www.cnblogs.com/yiyisawa/archive/2008/12/16/1356191.html
wcf client与webservice通信(-)只修改配置文件而改变服务端
问题: 假设有一个大型系统新版本使用wcf 作为服务端,生成wcf client 调用可以调用正常。 那如果当wcf 服务端出现问题或其他的原因我想再用回以前老版本的webservice或是jms server ,但客户端调用还是通过wcf client 调用。只通过更改配置来实现。 ?一、web service项目,添加一个普通service class .代码如下:
Code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->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.0Abin:找到svcutil.exe文件。开始菜单-->run --> input cmd --->cd C:Program FilesMicrosoft SDKsWindowsv6.0Abin -->回车; 输入svcutil http://localhost:8080/service/service.asmx,将会在C:Program FilesMicrosoft SDKsWindowsv6.0Abin生成一个webservice的代理类。注意:此代理类是wcf client形式的。(在后面只需将这个代理类小作改动,便可用于wcf sevice.) 生成的代理类: ?
Code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->//------------------------------------------------------------------------------ //?<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方法中调用。 ?
Code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ -->?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},?result); ????????????//?Call?the?Multiply?service?operation. ????????????value1?=?9.00D; ????????????value2?=?81.25D; ????????????result?=?client.Multiply(value1,?value2); ????????????Console.WriteLine("Multiply({0},?result); ????????????//?Call?the?Divide?service?operation. ????????????value1?=?22.00D; ????????????value2?=?7.00D; ????????????result?=?client.Divide(value1,?value2); ????????????Console.WriteLine("Divide({0},?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里面的内容拷过来即可。 ?
Code
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --><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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |