加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WCF 调用webservice

发布时间:2020-12-17 01:09:10 所属栏目:安全 来源:网络整理
导读:http://www.cnblogs.com/yiyisawa/archive/2008/12/16/1356191.html wcf client与webservice通信(-)只修改配置文件而改变服务端 问题: 假设有一个大型系统新版本使用wcf 作为服务端,生成wcf client 调用可以调用正常。 那如果当wcf 服务端出现问题或其他

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读