1

我以前见过这个问题(这里是一个),但是解决方案是不重用引用的程序集。我需要重用包含的程序集,因为多个服务引用相同的共享对象。如果我不重用程序集,则会出现命名空间错误,因为通过不同的命名空间引用了相同的对象。(即Service1.Object,Service2.Object)

简而言之,我需要生成的 Client 类扩展 Web 服务的 ClientBase,但我无法取消选中重用引用的程序集,因为我需要具有相同命名空间的共享对象。有什么建议么?

4

2 回答 2

1

您可以使用svcutil.exe生成客户端代理,并使用/r开关指定要引用的程序集,而不是在自动生成的客户端代理代码中重新发出。

  • ProjACommon
  • ProjBSvc
    • 参考 ProjACommon
  • 项目客户端
    • 参考 ProjACommon
    • 您想要一个引用 ProjA 类型和/或代码的客户端,而不是将它们自动生成到 C 中的新命名空间中

在构建 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 文档

于 2013-04-19T15:38:39.683 回答
0

使用映射器,这意味着您将必须复制模型(对象)并拥有一个将对象从一个命名空间映射到下一个命名空间的类。

于 2013-04-19T15:39:03.327 回答