我以前见过这个问题(这里是一个),但是解决方案是不重用引用的程序集。我需要重用包含的程序集,因为多个服务引用相同的共享对象。如果我不重用程序集,则会出现命名空间错误,因为通过不同的命名空间引用了相同的对象。(即Service1.Object,Service2.Object)
简而言之,我需要生成的 Client 类扩展 Web 服务的 ClientBase,但我无法取消选中重用引用的程序集,因为我需要具有相同命名空间的共享对象。有什么建议么?
我以前见过这个问题(这里是一个),但是解决方案是不重用引用的程序集。我需要重用包含的程序集,因为多个服务引用相同的共享对象。如果我不重用程序集,则会出现命名空间错误,因为通过不同的命名空间引用了相同的对象。(即Service1.Object,Service2.Object)
简而言之,我需要生成的 Client 类扩展 Web 服务的 ClientBase,但我无法取消选中重用引用的程序集,因为我需要具有相同命名空间的共享对象。有什么建议么?
您可以使用svcutil.exe生成客户端代理,并使用/r开关指定要引用的程序集,而不是在自动生成的客户端代理代码中重新发出。
在构建 ProjBSvc exec 之后,输出 .wsdl & .xsd
svcutil.exe ProjBSvc.dll
第二次使用 wsdl & xsd 生成代理/客户端:
svcutil.exe *.wsdl *.xsd /o:<ProjCClientPath>/Client.cs /r:ProjACommon.dll
ProjCClient 引用之前步骤生成的 Client.cs
使用对象浏览器构建和检查,您将看到 C 中的类型引用 A 中的类型,而不是 C 命名空间中具有相同名称的新类型。您可能需要/tcv
和/n
其他开关来满足您的需求。
这是一篇可能会有所帮助的文章。它还链接到svcutil 的 Microsoft 文档
使用映射器,这意味着您将必须复制模型(对象)并拥有一个将对象从一个命名空间映射到下一个命名空间的类。