5

我创建了两个具有从 xsd 模式文件导入的共享类型的 wsdl 文件。

之后,我使用 wsdl.exe 工具生成的带有参数 /serverInterface 的接口创建了 Web 服务。

第一个 Web 服务,具有 Web 方法“RegisterData”,系统“A”将一些要处理的复杂对象放入队列。由于此方法返回布尔值(告诉我们对象注册成功)。

第二个 Web 服务,具有 Web 方法“UpdateData”以基于同一对象更新系统“B”中的某些数据,并在系统“A”上进行了更改。

因此,在系统“A”中,我必须为第二个 Web 服务创建客户端,在这里我将使用修改后的复杂对象 us 参数调用方法“UpdateData”。

但是当我在 Visual Studio 中创建这个客户端(通过添加 Web 引用或添加服务引用)时,我必须为客户端创建一些命名空间。然后当我试图调用“UpdateData”时,agument 对从第一个 Web 服务“RegisterData”方法接收到的同一个对象有不同的命名空间。

我想创建第一个 Web 服务和第二个 Web 服务客户端,我可以在它们之间使用相同类型的对象。

非常感谢您的帮助。

4

2 回答 2

5

我不相信这对于 ASMX Web 服务是可能的。

但是,WCF 确实支持这一点。


WCF 链接:


实际上,我想我可能误读了你的问题。我虽然你试图在客户端和服务器之间共享相同的类型。ASMX 无法做到这一点。但是,您似乎正在尝试在两个客户端代理之间共享相同的类型。您可以使用 WSDL.EXE 工具轻松地做到这一点。

考虑一个模式 DataTypes.xsd 和两个导入它的 WSDL 文件 ServiceA.wsdl 和 ServiceB.wsdl。要创建服务器接口,请使用:

wsdl /serverInterface /n:SharedTypes.Servers /out:Services.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

这将创建您可以实现的接口以创建您的服务。这些接口都将使用一组从 DataTypes.xsd 创建的类。要创建代理类,只需使用:

wsdl /n:SharedTypes.Proxies /out:Proxies.cs ServiceA.wsdl ServiceB.wsdl DataTypes.xsd

请注意,您不需要/sharedTypes开关。那有不同的目的。当您需要从服务下载 WSDL 和任何 XSD 时,它用于组合外部服务的类型。

我已经使用像您这样的示例进行了尝试,ServiceA 将消息发布到队列中,客户端拾取该消息并将其发送到 ServiceB。它工作得很好。

于 2010-07-01T19:35:03.437 回答
0

我同意通过 VS Web 参考功能无法做到这一点。为了满足您的要求,您可以使用带有 /sharetypes 开关的 wsdl.exe 实用程序。

有关详细信息,请参阅Web 服务描述语言工具 (Wsdl.exe)

于 2010-09-12T08:18:22.440 回答