【问题标题】:WCF SOAP proxy fails calling API Management, works with PostmanWCF SOAP 代理调用 API 管理失败,与 Postman 一起使用
【发布时间】:2018-07-19 11:49:35
【问题描述】:

我们有一个使用 Visual Studio 连接服务工具 (VS2017) 生成的 SOAP 代理。

  • 当我们调用 .asmx 端点时,SOAP 代理可以完美运行。

  • 当我们与 API 管理端点通信时,该端点被定向到 它失败的同一个 .asmx 端点。

  • 当我们使用 Postman 与 API Managemenet 端点进行通信时, 调用有效,我们从提琴手跟踪中获取了 HTTP 标头和 SOAP 主体。

总结一下

我们知道 .asmx 端点在使用 SOAP 客户端和邮递员时有效。

我们知道 API 管理通过 Postman 工作,但不使用 WCF 工具生成的 SOAP 客户端。

我们在调用 API 管理时基本上会返回一个 404 并返回一个小的 JSON 正文

{ "statusCode": 404, "message": "Resource not found" }

我只是不明白为什么通过 Postman 传递的相同响应有效,但在底层 WCF SOAP 生成的客户端中却失败了。

有人知道为什么这可能会失败吗?

需要注意的一件有趣的事情是我尝试使用 HTTPClient 进行调用,我传入了标头和 SOAP 信封,并且调用从 C# 中运行。所以它一定与底层 WCF 基础设施和 API 管理有关,但我无法确定这可能是什么,特别是当 SOAP 客户端在直接与 ASMX 服务通信时工作。

【问题讨论】:

  • 在从 Postman 和从生成的代理调用时,您看到 Fiddler 跟踪有什么不同吗?也许你可以分享它们。
  • 绝对没有 Vitaliy,它们完全匹配。
  • 直接从代理调用 SOAP 和通过 APIM 调用 SOAP 有何不同?除了URI还有什么区别吗?
  • 同样的东西 Vitaliy,没有区别。我是一位非常有经验的开发人员,这个让我很难过。我花了大约一天半的时间来研究我能想到的每一个选项。甚至可以从生成的 XML 模式中删除 XML 排序,以防出现反序列化问题。在这个阶段,我将采用代码生成的 XML 对象定义(有 100 个),并使用 HTTPClient 手动编写代理,并自己生成 SOAP 信封,将每个请求的 XML 注入到 SOAP 信封中。
  • 至少这样我就可以完全控制和了解正在发生的事情,并且我知道 HTTPClient 调用同时适用于 ASMX 端点和 APIM 端点。

标签: c# .net-core azure-api-management


【解决方案1】:

只是无法深究。我最终使用 HTTP 客户端手动重写了代理。我从工具中获取了生成 XML 实体的代码,删除了所有 XML 属性并像 POCO 一样对待它们。我编写了一个包装器来生成 SOAP 信封并读取相应的结果并将它们序列化回 POCO 对象。 像魅力一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多