【问题标题】:Class definition duplication in .NET client WCF proxy classes for Java web serviceJava Web 服务的 .NET 客户端 WCF 代理类中的类定义重复
【发布时间】: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,但由于我必须经常更新代理类,因此手动工作会非常痛苦。

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

最好的问候, - 布鲁斯

【问题讨论】:

    标签: .net wcf web-services wsdl


    【解决方案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,我会尝试您的解决方案,并让您知道它是否适合我。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      相关资源
      最近更新 更多