从 BizTalk WCF-WebHttp 适配器向 Mule 服务发布消息时出错:服务不支持内容类型应用程序/json
Posted
技术标签:
【中文标题】从 BizTalk WCF-WebHttp 适配器向 Mule 服务发布消息时出错:服务不支持内容类型应用程序/json【英文标题】:Error while posting message to Mule service from BizTalk WCF-WebHttp adapter: Content Type application/json not supported by service 【发布时间】:2020-09-24 07:59:12 【问题描述】:我正在尝试向绑定 HTTPs 的 Mule 模拟服务发布消息。我可以看到消息在发布到 Mulesoft 的服务之前被转换为适当的 JSON 格式。
我什至尝试过使用 Postman 将这条消息直接发布到服务中,并且效果很好。但是通过 WCF-WebHttp 适配器发送相同的消息时,我不断收到以下错误:
从 BizTalk WCF-WebHttp 适配器向 Mule 服务发布消息时出错: 服务 https://anypoint.mulesoft.com/mocking/api/v1/links/uuid/uriparam 不支持内容类型 application/json 客户端和服务绑定可能不匹配。 "code":"INVALID_RESPONSE_ACCEPT_HEADER","message:"尝试查找无效媒体类型的响应时出错"*
WCF-WebHttp 适配器配置为使用安全模式作为传输和传输客户端凭据类型为无,因为服务不需要任何身份验证或证书。
请注意,相同的 BizTalk 应用程序被配置为将消息推送到虚拟 Mulesoft 云中心服务,并且它可以与相同消息内容的 HTTP URL 正常工作。
【问题讨论】:
嗨 Abjt G。该错误似乎表明 Mulesoft 服务不喜欢 BizTalk 发送的内容类型应用程序/json。您能否与 Mulesoft 服务的所有者确认他们期望的内容类型?可能他们想要 Content-type: text/json 代替。 谢谢@Dijkgraaf,当然可以。我尝试使用 Content-Type text/json 发送请求,但收到错误响应 (400),因为“text/json 不是请求正文接受的 MIME 类型之一”。有趣的是,Postman 对 Content-Type 指定为 application/json 的同一服务的请求被接受,但对于任何其他内容类型,它都会引发错误请求 (400) 错误。 可以对比一下服务发送的HTTP请求和Postman发送的HTTP请求。也许您的服务会自动添加一些请求标头。 如何在 BizTalk 中发送Content-Type: application/json
?您是否在 WCF-WebHttp 传输属性的“消息”选项卡上设置了它?
是的,在消息选项卡上。我还创建了一个自定义行为并在其中设置了内容类型。但无论哪种方式,它都给出了相同的响应。
【参考方案1】:
错误看起来与 Accept 标头有关。您应该在从 BizTalk 发送请求时将 Accept 标头设置为值 */*
。 postman 自动添加标题。
如果这不起作用,则使用 Postman 控制台日志查看实际请求和响应的标头,并将其与 BizTalk 请求和响应进行比较。 要查看 BizTalk 请求详细信息,请使用 Fiddler(您可以在发送请求的计算机上运行 fiddler 后将 http://localhost:8888 设置为代理),然后比较两个结果并相应地更正不匹配。
【讨论】:
谢谢,带有 Content-Type 标头的 Accept 标头导致了同样的错误。在标头中指定 Content-Type、Accept、Cache-Control、AcceptEncoding 后,它起作用了。奇怪的是,在将消息推送到其他 RESTful 服务时,我们不必显式指定这些标头。以上是关于从 BizTalk WCF-WebHttp 适配器向 Mule 服务发布消息时出错:服务不支持内容类型应用程序/json的主要内容,如果未能解决你的问题,请参考以下文章
BizTalk WCF-WebHTTP REST 客户端与正文和标题签名与静态端口