使用WSDL.exe生成Web服务代理时,默认为其他URL
我的项目中有许多共享类型的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服务的每个实例。
解决方案
生成的代理类是局部类,因此我的解决方案是在不同的(未生成的)代码文件中添加自己的构造函数,该文件显式地为每个代理读取不同的设置。
嗯,下面的wsdl.exe添加参数将解决我的问题,而不是使用传入Url的重载构造函数创建另一个局部类。
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,则它将使用它替换MyProxy.cs中的http:// MyServer /子字符串。如果不存在appSetting,那么它将仅使用wsdl.exe中提供的路径(例如,使用appSetting时为{BaseSoapUrl} /WebService1.asmx或者不使用appSetting时为http://MyServer/WebService1.asmx) 。
感谢Rick Kierner向我指出正确的方向。
为了补充以利亚自己的答案,这是我给他的电子邮件答案。
我必须写博客,因为XML不能很好地粘贴到此文本框中:http://www.rickdoes.net/blog/archive/2008/09/29/wsdl-shared-types-and-configuration.aspx