使用 HTTPAdapter 和 Receive.dll 会引发错误

Posted

技术标签:

【中文标题】使用 HTTPAdapter 和 Receive.dll 会引发错误【英文标题】:Using HTTPAdapter and Receive.dll throws error 【发布时间】:2021-11-17 15:36:42 【问题描述】:

我正在使用 BizTalk 2020。我有一个 webapp,它调用一个通过 IIS 调用 BizTalk 的 webapi。运行请求时,我在 BizTalk 中收到错误:

执行接收管道失败:“Microsoft.BizTalk.DefaultPipelines.XMLReceive,Microsoft.BizTalk.DefaultPipelines,Version=3.0.1.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”来源:“XML 反汇编程序”接收端口:“HTTPREC” URI:“/BTHTTP/BtsHttpReceive.dll” 原因:按消息类型“http://schemas.microsoft.com/2003/10/Serialization/#string”查找文档规范失败。验证正确部署的架构。

我验证了我的架构,发现它们都已部署。我为我的消息使用了一个生成的实例。

<ns0:Select xmlns:ns0="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/MainData">  <ns0:Columns>LocationID,BulletinLevel,NotifyUponCompletion,SupervisorName,CrewMemberID,AircraftID</ns0:Columns>
  <ns0:Query></ns0:Query>
</ns0:Select>

我验证了它。我查看了 BizTalk Hub,发现前一天的 SND 端口的可恢复消息。我打开消息,这是正文的内容:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">&lt;Select xmlns="05/TableOp/dbo/MainData"&gt;&lt;Columns&gt;LocationID,BulletinLevel,NotifyUponCompletion,SupervisorName,CrewMemberID,AircraftID&lt;/Columns&gt;&lt;/Select&gt;</string>

不确定为什么它将 xmlns 作为字符串添加到消息中。我已经重建和重新部署了几次,更新后重新启动了主机。我的端口正在使用 XMLReceive 和 XMLTransmit 管道。该进程收到一条消息,然后调用 SQL Server 以运行选择。

这是我的编排:

在运行请求之前,我是否需要将&lt;string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"&gt; 添加到我的消息中?

我检查了 IIS、管道设置、ISAPI 模块设置和 asp.net 版本,一切看起来都正确。

更新 (12/08/2021) 创建了一个自定义管道,用于删除包装原始消息的元素。它处理,但我从 Receive.dll 收到 500 Internal Sever 错误。如果消息在管道中被修改,不确定为什么 Receive.dll 没有显示状态 200。

有什么建议吗?

【问题讨论】:

这是我从上一次运行中找到的消息正文 (SND PORT) schemas.microsoft.com/2003/10/Serialization/… xmlns="05/TableOp/dbo/MainData"><Columns>LocationID, BulletinLevel,NotifyUponCompletion,SupervisorName,CrewMemberID,AircraftID</Columns></Select> 为什么您的邮件有 Microsoft 命名空间?您可以将您的架构添加到问题中吗? 另外,您如何创建发送到发送端口的消息?我怀疑您只是将其设置为编排中的字符串,而不是 XML 有效负载,然后您使用平面文件模式并发送端口来发送。对于发送端口,您使用的是什么适配器? 模式由向导生成,它包含 Select 和 SelectResponse 模式。这是请求。 我在发送端口上使用 HTTPAdapter,带有 XML Rec、XML Transmit 管道。看起来我的消息没有被修改,因为我在 Sql req 和对网站的返回响应上得到了同样的错误。 【参考方案1】:

问题在于它正在使用具有内部 Microsoft 命名空间的架构,并试图将其用于不应该用于的东西。将 SQL 响应映射到您使用自定义命名空间创建的架构,然后通过发送端口将其发送出去。

【讨论】:

以上是关于使用 HTTPAdapter 和 Receive.dll 会引发错误的主要内容,如果未能解决你的问题,请参考以下文章

从 HttpAdapter 获取会话到基于 Java 的适配器

IBM Worklight 与 HttpAdapter 的连接正在重置

C# socket receive方法

receive和process的过程

STM32F0 USB CDC_Init_FS() 和 CDC_Receive_FS() 使用 CubeMX

使用 HAL_UART_Receive_IT() 和 HAL_UART_RxCpltCallback() 时会丢失字节吗?