如何使用使用 .xsd 模式作为参数的 SOAP Web 服务?

How to consume SOAP Webservice that uses .xsd Schemas as parameters?

我正在尝试使用 Visual Studio 将此 SOAP 与 .NET Web 应用程序一起使用。

我的问题是,如果我的 wsdl 只描述了两种方法; “processMessage”和“processOCIMessage”。他们期望的消息是一个适合 30 something xsd 模式之一的字符串,使用 API 的最佳方式是什么?

比如我想获取一些用户信息。我需要写一个符合这个模式的字符串:

<xs:complexType name="UserGetRequest19">
    <xs:annotation>
      <xs:documentation>
        Request to get the user information.  The response is either 
        UserGetResponse19 or ErrorResponse.
      </xs:documentation>
    </xs:annotation>
    <xs:complexContent>
      <xs:extension base="core:OCIRequest">
        <xs:sequence>
          <xs:element name="userId" type="UserId"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType> 

我知道如何传递 answer to this question 中描述的简单参数。但是我如何使用 Schemas 做到这一点?

Visual Studio 中是否有工具可以将它们变成用户友好的 C# classes/models?或者我是否需要手动输入 XML 字符串,转义特殊字符并将其作为参数传递给“processMessage”?

首先,使用内置工具添加一个从 WSDL 开始的 Visual Studio Web 引用。这应该会创建您的客户端代理,并且数据传输 classes;你最终会得到一个 class 和 属性 作为字符串 processMessageReturn,另一个 class 和 属性 作为 processOCIMessageReturn,也作为一个字符串。

接下来,运行 通过 xsd.exe 您感兴趣的 XSD 使用 /c 开关生成您的 classes。

从那时起,您将需要编写代码来相应地实例化和填充您在第二步中创建的 classes。使用 XmlSerializer 将 "top" class 序列化为字符串,然后将该字符串分配给第一步中提到的 属性 。您无需担心将 XML 编码为文本节点,因为框架内置的 XML 序列化程序会为您处理这件事。