1

我正在尝试获取一组现有的 WSDL 和 XSD 文件,并使用 SoapCore NuGet 包在我的 .Net Core 应用程序中创建一个 SOAP API 端点。

通过如下所示配置 SoapCore,我按预期返回了 WSDL ,但是,当我使用 SoapUI 根据我的 WSDL 创建一个新的 SOAP 项目时,它会执行两个请求。第一个获取 WSDL,这是我所期望的,并且成功了。但随后它在同一端点上执行另一个请求,但使用包含的查询字符串参数?xsd&name=。这会导致 SoapCore 失败,因为请求正在请求 XSD,但没有给出文件名。

我不知道问题出在 SoapUI、SoapCore 还是我的代码上。为什么 SoapUI 会提出这个请求?这是正常的吗?Soap API 端点是否必须同时具有 WSDL 和 XSD 才能工作?我将我拥有的 XSD 与 WSDL 放在同一个文件夹中,并将 SoapCore 指向它们,如上面的链接所示,但问题仍然存在。

我通常不使用 SOAP,所以希望这个问题有意义。

更新: 博格丹问了一个关于进口的有趣问题。XSD 确实具有引用其他文件的导入。但是,WSDL 在 wsdl:types 元素中嵌入了 XSD。在这个标签中也有导入标签,但它们没有schemaLocation属性。这是一个例子:

<xs:import xmlns:xs="http://www.w3.org/2001/XMLSchema"
            namespace="http://www.starstandards.org/STAR" />

这可能是 SoapUI 使用空白文件名进行调用的原因吗?这个标签是错误的还是有效的?如果不包含<xs:import>该属性,则默认路径/文件名是什么?schemaLocation

4

1 回答 1

1

您的 WSDL 很可能会导入 XML 模式,而模式的位置是 SoapUI 无法解析的。

我不熟悉 SoapCore 以了解它如何解析 XSD 导入,但对于一般的 WSDL,导入是:

  • 在与 SOAP Web 服务相同的端点上,然后您使用一些 URL 参数访问 XSD,例如 SoapUI 正在尝试执行的操作,例如?xsd&name=identifierForSchemaHere. 这类似于您使用?wsdl;访问 WSDL 的方式。
  • 或者该位置是一些绝对 URL 路径,您可以在其中获取 XSD 文件。

现在回答这个问题:

Soap API 端点是否必须同时具有 WSDL 和 XSD 才能工作?

理论上,两者都不需要。

WSDL 就像机器可读的文档。您可以使用工具指向 WSDL,并且这些工具可以生成允许您调用服务的代码,或者可以创建为您处理 SOAP 详细信息的服务器存根。但是,如果您构建了一个有效的 SOAP Web 服务,如果您知道如何格式化 SOAP XML 消息,则可以在没有 WSDL 的情况下调用它,通过使用作为开发人员需要阅读以了解如何与 Web 服务交互的普通文档.

您不需要 WSDL,但大多数 SOAP Web 服务应该提供一个,以方便必须与 Web 服务交互的客户端。当您提供 WSDL 时,您还需要提供 XSD 模式(或<types>WSDL 的部分)。没有 XSD 的 WSDL 只用了一半,因为它缺少允许客户端知道如何在 SOAP 消息中构建 XML 元素的部分。

进一步阅读:

于 2021-05-14T08:17:10.580 回答