.Net消费Web服务:两个不同服务中的相同类型

.Net消费Web服务:两个不同服务中的相同类型,.net,web-services,.net,Web Services,我必须使用两种不同的web服务。两者都包含“用户”对象的定义 当我使用“添加服务引用”引用服务时,我给每个服务一个唯一的命名空间: com.xyz.appname.ui.usbo.UserManagement com.xyz.appname.ui.usbo.AgencyManagement 我的问题是,生成的每个代理都包含一个新的用户类。一个位于com.xyz.appname.ui.usbo.UserManagement.user,另一个位于com.xyz.appname.ui.usb

我必须使用两种不同的web服务。两者都包含“用户”对象的定义

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

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。但是,用户对象是相同的,我希望将其视为相同的对象

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

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

谢谢

编辑:


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

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

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.

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

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

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


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

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


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

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

wsdl.exe /sharetypes file://c:\path\to\file.wsdl file://c:\path\to\otherFile.wsdl /namespace:<your namespace> /output:(any switches etc...)
wsdl.exe/sharetypes文件://c:\path\to\file.wsdl文件://c:\path\to\otherFile.wsdl/namespace:/output:(任何开关等)

sharetypes开关要求您提供服务的URL,如果您只是将wsdl指向这些文件,则无法工作。

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