BizTalk 2013:如何通过SQL查询获取挂起消息的接收文件名?
BizTalk 2013 通过SQL查询获取挂起消息关联的接收文件详情
完全可以通过SQL查询实现,核心是关联BizTalk的挂起消息表与消息上下文属性表,以下是具体方案:
核心关联逻辑
通过文件适配器接收的消息,其文件名、路径等详情会以上下文属性的形式存储,你需要关联以下关键表:
- 挂起消息基础信息:
BizTalkMsgBoxDb.dbo.SuspendedQueue - 消息上下文属性(含接收文件属性):
BizTalkMsgBoxDb.dbo.MessageContextProperties - 接收端口/位置配置:
BizTalkMgmtDb.dbo.ReceivePort、BizTalkMgmtDb.dbo.ReceiveLocation
示例查询语句
SELECT sq.MessageID, sq.ErrorDescription, sq.SuspendTime, mcp.PropertyValue AS 接收文件名, rp.Name AS 接收端口名, rl.Name AS 接收位置名 FROM BizTalkMsgBoxDb.dbo.SuspendedQueue sq INNER JOIN BizTalkMsgBoxDb.dbo.MessageContextProperties mcp ON sq.MessageID = mcp.MessageID INNER JOIN BizTalkMgmtDb.dbo.ReceivePort rp ON mcp.ReceivePortID = rp.ID INNER JOIN BizTalkMgmtDb.dbo.ReceiveLocation rl ON rp.ID = rl.ReceivePortID WHERE -- 过滤文件适配器专属的接收文件名属性 mcp.PropertyName = 'ReceivedFileName' AND mcp.PropertyNamespace = 'http://schemas.microsoft.com/BizTalk/2003/file-properties' -- 可按需添加时间范围过滤,比如查询近7天的挂起消息 -- AND sq.SuspendTime >= DATEADD(day, -7, GETDATE())
注意事项
- 若部署了多个MessageBox数据库,需针对对应的MsgBox库执行查询
- 仅文件适配器接收的消息会携带
ReceivedFileName属性,HTTP、WCF等其他适配器无该字段 - 若上述查询无结果,可尝试关联
BizTalkMsgBoxDb.dbo.MessageContextPromotedProperties表(部分场景下属性会存储在此),关联逻辑与上述一致 - 如需文件大小详情,可添加
PropertyName = 'FileSize'的条件,同样使用文件属性命名空间
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

