使用WSDL.exe生成Web服务代理时默认为不同的URL
-
02-07-2019 - |
题
我的项目中有很多共享类型的Web服务。
为简单起见,我将使用两个Web服务进行演示。
http://MyServer/WebService.asmx 上的WebService1 http://MyServer/WebService.asmx 上的webService2
当我为这两个服务生成代理时,我使用:
wsdl / sharetypes http://MyServer/WebService1.asmx http://MyServer/WebService2.asmx / appsettingurlkey:WebServiceUrl / namespace:MyNamespace /out:MyProxy.cs
问题是每个Web服务的appsettingurlkey都是相同的 在代理文件中。我希望能够指定多个 appsettingurlkey参数。这是如何完成的?我想 因为/ sharetypes参数可用,所以应该有一个 用于指定appsettingurlkey的解决方案 确定了Web服务。
如果使用wsdl.exe无法做到这一点,我建议你做什么?我宁愿不更新wsdl.exe输出的生成代码,我也不想通过我的整个应用程序将Url传递给Web服务的每个实例。
解决方案
生成的代理类是部分类,因此我的解决方案是在不同的(非生成的)代码文件中添加您自己的构造函数,该文件显式地为每个代理读取不同的设置。
其他提示
为了补充以利亚自己的答案,这是我给他的电子邮件答案。
我不得不写博客,因为XML没有很好地粘贴到这个文本框中: http://www.rickdoes.net/blog/archive/2008/09/29/wsdl-shared-types-and-configuration.aspx
啊,而不是使用重载构造函数传递Url创建另一个部分类,wsdl.exe的以下附加参数将解决我的问题...
wsdl / sharetypes http://MyServer/WebService1.asmx http://MyServer/WebService2.asmx / appsettingurlkey:WebServiceUrl / namespace:MyNamespace /out:MyProxy.cs / appsettingurlkey:BaseSoapUrl / appsettingbaseurl: http:// MyServer /
如果web.config有一个BaseSoapUrl appSetting,那么它将使用它替换 http:// MyServer / 来自MyProxy.cs的子字符串。如果appSetting不存在,那么它将只使用wsdl.exe中提供的路径(例如:{BaseSoapUrl} /WebService1.asmx使用appSetting或 http://MyServer/WebService1.asmx 。
感谢Rick Kierner指出我正确的方向。