Java Web 服务的 .NET 客户端 WCF 代理类中的类定义重复

Posted

技术标签:

【中文标题】Java Web 服务的 .NET 客户端 WCF 代理类中的类定义重复【英文标题】:Class definition duplication in .NET client WCF proxy classes for Java web service 【发布时间】:2011-11-17 15:11:39 【问题描述】:

我正在为 Java Web 服务开发 .NET WCF 客户端。我可以从 Java Web 服务 WSDL 成功生成 .NET 代理类,并通过代理类调用该服务。一个问题是代理类中的类重复。假设我们有两个 java web 服务:java_ajava_b,都引用了一个类 common_class

现在,如果我在客户端为两个 Java Web 服务生成两个 .NET 代理类,例如:proxy_aproxy_b。现在在两个代理类中都有一个名为 common_class 的类,一个是 proxy_a.common_class,另一个是 proxy_b.common_class。我想为客户端的两个代理类编写一些帮助类,但是很难处理 common_class。我必须编写许多重复代码来操作两个我认为不应该发生的 common_class。应该可以手动修改代理类以提取 common_class,但由于我必须经常更新代理类,因此手动工作会非常痛苦。

所以我的问题是:在生成代理类时如何避免这种类定义重复?

最好的问候, - 布鲁斯

【问题讨论】:

【参考方案1】:

您可以在物理上编辑一个类,并将其添加到项目中,而不是作为序号文件,而是作为文件的引用,在两个项目中。不幸的是,你必须从这个文件中删除命名空间声明,否则 2 个代理也不能一起工作。

【讨论】:

【参考方案2】:

您可以通过手动编辑 .SvcMap 文件来解决此问题。

为第一个 Web 服务 (proxy_a) 创建代理类。

然后转到解决方案资源管理器并确保选中“显示所有文件”选项。

现在打开 Reference.svcmap 文件并搜索 MetadataSources 节点。

例如:

<MetadataSources>
    <MetadataSource Address="http://www.example.com/proxy_a/mex"
     Protocol="mex" SourceId="1" />
</MetadataSources>

只需将第二个服务 (proxy_b) 的 URL 添加到此节点。不要忘记增加 SourceId 属性。

<MetadataSources>
  <MetadataSource Address="http://www.example.com/proxy_a/mex"
   Protocol="mex" SourceId="1" />
  <MetadataSource Address="http://www.example.com/proxy_b/mex"
   Protocol="mex" SourceId="2" />
</MetadataSources>

右键单击服务引用并选择“更新服务引用”以重新生成客户端代码。现在,如果公司正确构建了服务并在需要的地方赋予了命名空间,那么只会为它们共享的公共类创建一种类型。

需要更多信息?一个月前我写了一篇关于这个问题的文章:

https://github.com/geersch/WcfSvcMap

希望对你有帮助。

【讨论】:

感谢 Christophe,我会尝试您的解决方案,并让您知道它是否适合我。

以上是关于Java Web 服务的 .NET 客户端 WCF 代理类中的类定义重复的主要内容,如果未能解决你的问题,请参考以下文章

强大的自托管服务器的最佳选择:WCF 与 ASP.NET Web Api

不同的 WSDL ASMX、WCF Web 服务

在 .NET 中开发新的 RESTful Web 服务——我应该从哪里开始? ASP.NET-MVC,WCF?

有没有办法让客户端连接到现有的 WCF Web Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?

如何创建 PHP SOAP 客户端以在 SSL 下调用 WCF Web 服务?

WCF Web 服务错误:无法激活该服务,因为它不支持 ASP.NET 兼容性