【发布时间】: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