BizTalk 发送适配器 HTTP 发布响应

Posted

技术标签:

【中文标题】BizTalk 发送适配器 HTTP 发布响应【英文标题】:BizTalk Send Adapter HTTP Post Response 【发布时间】:2012-11-02 19:44:46 【问题描述】:

我有一个 BizTalk 2010 项目,其中包含一个编排,该编排需要进行 HTTP 发布,然后检查响应的状态代码和正文以确定下一步行动。

我可以配置编排和端口来进行 HTTP Post,但我无法收到响应。

我应该使用发送/接收端口还是关联?

我应该为响应使用什么架构(我相信响应是标准的 http 响应:http://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6)。

【问题讨论】:

当您说 HTTP 发布时,您是指将 Xml 发送到 SOAP 服务,或者例如POX 或 JSON WebAPI 调用或 MVC 控制器操作等? 不是xml,是类似于EDI的结构化文本。 @Matt 你能发一下 EDI 消息结构吗 @Matt - 您的发送端口是如何配置的?当您说您无法收到响应时,您的意思是正在发生错误,还是您没有看到编排收到响应? @MlkCode,我无法发送 EDI 消息结构。我只是尝试执行一个帖子并检查以类似于***.com/questions/692342/… 上的 Jugglist 答案但使用 BizTalk 的方式返回的响应状态代码(和响应正文)。我认为消息或服务类型不相关。 【参考方案1】:

Http 状态代码应该作为上下文属性在响应消息中可用,您可以在表达式形状中访问它。

statusCode = ResponseMessage(HTTP.ResponseStatusCode);

您的 ResponseMessage 应该是 System.Xml.XmlDocument 类型,但由于它不是真正的 Xml 文档,请确保将请求/响应端口配置为使用响应端的 PassThruReceive 管道。

【讨论】:

感谢 Brett,但是我收到一条错误消息“消息中没有与属性 'HTTP.ResponseStatusCode' 关联的值。” 为了清楚起见:我有一个编排将一个简单的 xml 消息 (test) 发送到发送-接收端口。请求消息类型与简单消息的架构相匹配,并将发送管道配置为 XMLTransmit。响应消息类型为 System.Xml.XMLDocument,接收管道配置为 PassThruReceive。在接收形状之后,我有一个表达式形状,其中包含将 HTTP.ResponseStatusCode 写入事件日志的代码。发送端口是 HTTP 类型。 我取得了一些进展;在接收端口上使用自定义管道组件使我能够看到响应正文。但是状态代码和响应描述不包含在其中。这也有一个限制,即只有成功的消息(状态代码 200)才会生成响应。 我还设置了一个发送端口,以将消息的 ACKS 和 NACKS 保存在“传递通知”设置为“已传输”的单向发送端口上。我只能看到 NACK 的响应正文和响应状态代码 看来使用 user1826905 建议的两种方法的组合将解决原始问题。【参考方案2】:

如果您正在寻找消息已成功传输的一种通知(不在消息内容中),您可以在编排中设置逻辑发送端口属性,如下所示:

"Delivery Notification" = Transmitted

可以使用 Microsoft.XLANGs.BaseTypes.DeliveryFailureException 处理交付失败

【讨论】:

感谢您的回复,但我不确定其中任何一个如何让我查看/提取 http 响应状态代码。 检查 HTTP 响应代码并采取行动就像实现 HTTP 协议一样。 Biztalk 将其抽象化并提供“交付通知”,该通知应该足够可信以接受消息已成功发送。例如200、201、202、204都是HTTP成功响应码。 我尝试连接的第三方服务在成功时返回响应正文中的数据(代码 200),并在正文中返回 400-4nn 代码的错误消息。鉴于您提到的抽象,是否可以检索响应正文,如果可以,如何检索? 我的建议是使用另一个工具,如 Fiddler 并将您的数据发布到 URL。然后为成功和失败场景保存来自 URL 的响应。我猜这些将是某种平面文件或分隔文件,或者这些响应中会有一些逻辑将它们转换为平面文件 XSD。现在,您可以拥有一个请求-响应端口,并且在响应上您可以拥有您的平面文件管道。如果您可以发布从 URL 中看到的回复,您可能会更好。 谢谢建议,我明天去看看。我正在使用一个简单的测试工具来控制此时的响应。

以上是关于BizTalk 发送适配器 HTTP 发布响应的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk MQSC 适配器

为啥我不能通过 BizTalk SMTP 适配器更改正文部分的附件名称?

BizTalk 2010 SMTP 适配器中的附件非英语名称

BizTalk - 传递通知上的路由失败

BizTalk Server 2013 休息错误处理

Biztalk 适配器包安装 - 没有看到 WCF-SQL 适配器