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_a 和 java_b,都引用了一个类 common_class。
现在,如果我在客户端为两个 Java Web 服务生成两个 .NET 代理类,例如:proxy_a 和 proxy_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
在 .NET 中开发新的 RESTful Web 服务——我应该从哪里开始? ASP.NET-MVC,WCF?
有没有办法让客户端连接到现有的 WCF Web Http 服务而不使用 .Net Core 2 中的 WebHttpBinding?