【问题标题】:.Net Consuming Web Service: Identical types in two different services.Net Consuming Web Service:两种不同服务中的相同类型
【发布时间】:2010-09-17 13:50:50
【问题描述】:

我必须使用 2 个不同的网络服务。两者都包含“用户”对象的定义。

当我使用“添加服务引用”引用服务时,我给每个服务一个唯一的命名空间:

com.xyz.appname.ui.usbo.UserManagement    
com.xyz.appname.ui.usbo.AgencyManagement

我遇到的问题是生成的每个代理都包含一个新的用户类。一个位于 com.xyz.appname.ui.usbo.UserManagement.user,另一个位于 com.xyz.appname.ui.usbo.AgencyManagement.user。但是,用户对象是相同的,我想这样对待它们。

有没有一种方法可以以某种方式将用户对象作为一个对象引用,而不是将它们视为两个不同的对象?

我正在使用 .Net 3.5 来使用该服务。使用的服务是用 Java 编写的。

谢谢!!

编辑:

This forum thread 非常接近答案,但最终接受的答案是从客户端和服务器共享类型——我不能这样做,因为我们正在跨平台(Java 到 .Net)。真正的问题是,WCF 中的 svcutil 是否有 /sharetypes 类型的参数?

【问题讨论】:

  • 这将如何影响 Java? WSDL 工具生成 C# 代码。
  • 我添加服务平台是 Java 的原因是因为我得到的第一个答案是建议在客户端和服务器之间共享 .Net 类型。

标签: .net web-services


【解决方案1】:

您可以将 user 类型放在服务和客户端项目都引用的共享公共程序集中。然后在两个服务客户端的配置中,您可以选择在引用的程序集中重用类型的选项。这样,您就在程序集中使用该类型,而不是单独生成的类。

【讨论】:

    【解决方案2】:

    WSDL 工具有一个参数。

    /sharetypes
        Turns on type sharing feature. This feature creates one code file with
        a single type definition for identical types shared between different
        services (namespace, name and wire signature must be identical).
        Reference the services with http:// URLs as command-line parameters
        or create a discomap document for local files.
    

    【讨论】:

      【解决方案3】:

      当使用来自同一提供商的不同端点使用 Web 服务时,这是一种常见的情况。

      您可以使用“wsdl.exe /sharetypes”命令行工具创建一个共享代理类,该类将查看您提供的所有端点,并推断哪些类可以“共享”。

      在您的示例中,只要您的用户对象在两个服务中相同,它就会被拾取并包含在您的新共享代理类中。

      将这个共享代理类生成步骤添加为项目中的构建事件可能是有意义的,因为它始终是最新的。

      【讨论】:

        【解决方案4】:

        最终为我工作的是为 svcutil.exe 提供我生成代码所需的所有 WSDL 地址。 SVCUTIL 将查看每个服务的所有类型,并自动确定哪些是常见的并且应该重复使用。

        您想要共享的类型也应该有一个共享命名空间,并且应该在每个想要共享该类型的 Web 服务上调用该命名空间。

        【讨论】:

          【解决方案5】:

          如果您使用的是本地文件,您可以执行以下操作:

          wsdl.exe /sharetypes file://c:\path\to\file.wsdl file://c:\path\to\otherFile.wsdl /namespace:<your namespace> /output:(any switches etc...)
          

          sharetypes 开关要求您提供服务的 URL,如果您只是将 wsdl 指向文件,则该开关不起作用。

          【讨论】:

            猜你喜欢
            • 2023-03-03
            • 1970-01-01
            • 2017-02-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-04-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多