共享web服务方法
本文关键字:方法 服务 web 共享 | 更新日期: 2023-09-27 18:21:37
我正在.Net c#中编写web服务客户端,它使用后台和生产web服务。web方法的功能在阶段和生产中都是相同的。客户希望能够使用生产和阶段web服务中的web方法进行一些数据验证。我可以生成两个独立的代理类单独的代码库。有没有更好的方法可以让我通过做下面的来消除多余的代码
if (clintRequest=="production")
produtionTypeSoapClient client= new produtionTypeSoapClient()
else
stageSoapClient client= new stagetypeSoapClient()
//Instantiate object. Now call web methods
client.authenticate
client.getUsers
client.getCities
您应该能够只使用一个客户端。如果约定相同,则可以通过编程方式指定端点配置和远程地址。
假设你有这样的东西:
1) Staging - http://staging/Remote.svc
2) Production - http://production/Remote.svc
如果您使用的是Visual Studio,那么您应该能够从任一端点生成客户端。
那么,你应该能够做这样的事情:
C#代码:
OurServiceClient client;
if (clientRequest == "Staging")
client = new OurServiceClient("OurServiceClientImplPort", "http://staging/Remote.svc");
else
client = new OurServiceClient("OurServiceClientImplPort", "http://production/Remote.svc");
这应该允许您使用一组对象进行传递。上面的"OurServiceClientImplPort"部分引用了端点的配置文件:
配置:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="OurServiceClientSoapBinding" openTimeout="00:02:00" receiveTimeout="00:10:00" sendTimeout="00:02:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="2147483647" maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="128" maxStringContentLength="9830400" maxArrayLength="9830400" maxBytesPerRead="40960" maxNameTableCharCount="32768"/>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" realm=""/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<!-- This can be either of the addresses, as you'll override it in code -->
<endpoint address="http://production/Remote.svc" binding="basicHttpBinding" bindingConfiguration="OurServiceClientSoapBinding" contract="OurServiceClient.OurServiceClient" name="OurServiceClientImplPort"/>
</client>
</system.serviceModel>