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

时间:2011-09-15 07:13:59

标签: .net wcf web-services wsdl

我正在为一个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,但由于我必须经常更新代理类,所以进行手动作业将非常痛苦。

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

祝你好运, - 布鲁斯

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

然后转到Solution Explorer并确保选中“Show All Files”选项。

enter image description here

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

例如:

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

只需将第二项服务的URL( proxy_b )添加到此节点即可。不要忘记增加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>

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

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

http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/

希望它有所帮助。