0

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

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

WebService1 在http://MyServer/WebService.asmx 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 参数可用以来,应该有一个解决方案可以专门为每个识别的 Web 服务指定 appsettingurlkey。

如果 wsdl.exe 无法做到这一点,你会建议我做什么?我宁愿不更新 wsdl.exe 输出的生成代码,也不想通过将 Url 传递给 Web 服务的每个实例的整个应用程序。

4

3 回答 3

4

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

于 2008-09-28T10:59:57.537 回答
1

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

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

于 2008-09-29T17:34:00.920 回答
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/

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

感谢 Rick Kierner 为我指明了正确的方向。

于 2008-09-29T16:35:26.457 回答