【问题标题】:Creating web service and client with shared types使用共享类型创建 Web 服务和客户端
【发布时间】:2010-07-01 00:40:13
【问题描述】:

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

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

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

第二个网络服务,有网络方法“UpdateData”来更新系统“B”中的一些数据,基于这个相同的对象,在系统“A”的过程中被改变了。

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

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

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

非常感谢您的帮助。

【问题讨论】:

    标签: c# web-services wsdl asmx wsdl.exe


    【解决方案1】:

    我认为 ASMX 网络服务不可能做到这一点。

    不过,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。效果很好。

    【讨论】:

    • 你有关于这个方法的例子或文章吗?
    【解决方案2】:

    我同意无法通过 VS Web 参考功能来执行此操作。为了满足您的要求,您可以使用带有 /sharetypes 开关的 wsdl.exe 实用程序。

    欲了解更多信息,请参阅Web Services Description Language Tool (Wsdl.exe)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2015-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多