使用WSDL.exe生成Web服务代理时默认为不同的URL

时间:2008-09-27 04:51:42

标签: c# asp.net web-services wsdl

我的项目中有很多共享类型的Web服务。

为简单起见,我将使用两个Web服务进行演示。

http://MyServer/WebService.asmx处的WebService1 webService2位于http://MyServer/WebService.asmx

当我为这两个服务生成代理时,我使用:

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服务的每个实例。

3 个答案:

答案 0 :(得分:4)

生成的代理类是部分类,因此我的解决方案是在不同的(非生成的)代码文件中添加您自己的构造函数,该文件显式地为每个代理读取不同的设置。

答案 1 :(得分:1)

为了补充以利亚自己的答案,这是我给他的电子邮件答案。

我不得不写博客,因为XML没有很好地粘贴到这个文本框中:http://www.rickdoes.net/blog/archive/2008/09/29/wsdl-shared-types-and-configuration.aspx

答案 2 :(得分:0)

啊,而不是使用重载构造函数传递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/ < / p>

如果web.config有一个BaseSoapUrl appSetting,那么它将使用它来替换MyProxy.cs中的http://MyServer/子字符串。如果appSetting不存在,那么它将只使用wsdl.exe中提供的路径(例如:使用appSetting时为{BaseSoapUrl} /WebService1.asmx;如果不使用appSetting,则为http://MyServer/WebService1.asmx

感谢Rick Kierner指出我正确的方向。