BizTalk 2010 WCF-SQL 适配器 XML 轮询问题

Posted

技术标签:

【中文标题】BizTalk 2010 WCF-SQL 适配器 XML 轮询问题【英文标题】:BizTalk 2010 WCF-SQL adapter XML Polling issue 【发布时间】:2014-06-24 15:53:47 【问题描述】:

在一组接收位置上使用 WCF-SQL 适配器时,我遇到了一个以前从未见过的奇怪问题。

设置是 BizTalk 2010 中的一个接收端口,具有 3 个单独的接收位置。每个接收位置调用相同的存储过程,但参数不同,执行语句如下所示:

EXEC dbo.StoredProc 'WELLNESS'
EXEC dbo.StoredProc 'DIABETES'
EXEC dbo.StoredProc 'SCREENINGS'

在传递参数并使用 FOR XML PATH 返回 XML 时,存储过程完全按照预期工作。这里一切正常。

我遇到的问题似乎与这些接收位置中的 pollDataAvailableStatement 有关。无论我做什么,这 3 个都向 BizTalk 返回一个“1”,这将启动所有 3 个进程。轮询语句如下:

SELECT Count(1) FROM XXX.XXXXTable WHERE File_Type = 'TP - GAPS IN CARE DIABETES' AND File_Status = 'READY'
SELECT Count(1) FROM XXX.XXXXTable WHERE File_Type = 'TP - GAPS IN CARE WELLNESS' AND File_Status = 'READY'
SELECT Count(1) FROM XXX.XXXXTable WHERE File_Type = 'TP - GAPS IN CARE SCREENINGS' AND File_Status = 'READY'

因此,当我在表中适当地设置标志时,它会轮询以查看它是否应该运行并返回 true 以执行存储的过程。即使我只为数据库中的 WELLNESS 接收位置设置了标志,轮询语句对所有 3 个都返回 true,我对为什么感到困惑。我以前从未遇到过这种情况,并且我在许多其他 BizTalk 应用程序中使用相同的设置,没有任何问题。

其他信息,我正在使用 XmlPolling。我尝试将 pollWhileDataFound 设置为 True 和 False 并注意到相同的行为。轮询间隔是 600 秒(我也试过 3600 秒)。并且所有的 SQL 超时都是 40 分钟。

【问题讨论】:

【参考方案1】:

显然这是因为我在接收位置将 useAmbientTransaction 标志设置为 false。我将标志设置为 false 的原因是因为当它设置为 true 时出现无法访问数据库错误,和/或消息已关闭错误。这种情况时有发生,因为该设置似乎有问题。

简而言之,环境事务导致错误,因此我将其关闭。这导致 pollDataAvailableStatement 被跳过并且 EXEC 语句在每个轮询间隔运行。我正在调用的存储过程有一个参数,所以我更改了 exec 语句以使用参数名称以及值:

EXEC dbo.StoredProc @FeedType='DIABETES'

这解决了环境事务错误的问题,我能够将该标志设置回 true,现在 pollDataAvailableStatement 正在按预期工作。希望这对其他人有帮助。

【讨论】:

可以在此处找到的 MSDN 文档实际上说明了这一点:msdn.microsoft.com/en-us/library/dd787981.aspx 我必须以一种棘手且容易错过的方式进行管理:...您为此绑定属性指定的语句(PollingDataAvailable 语句) 不在适配器启动的事务中执行...这意味着当 UseAmbientTransaction = false 确实,在我终于意识到发生了什么之后,我才真正记得那一点。但奇怪的问题是,当我将 AmbientTransactions 设置为 true 时,我将如何得到随机错误(如找不到数据库的网络名称)。奇怪的是,只需更改 exec 语句以使用修复它的参数名称。不知道为什么。

以上是关于BizTalk 2010 WCF-SQL 适配器 XML 轮询问题的主要内容,如果未能解决你的问题,请参考以下文章

BizTalk适配器生成分层架构

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

WF 4 还是 BizTalk 2010?

BizTalk 发送适配器 HTTP 发布响应

适配器减慢 BizTalk

BizTalk MQSC 适配器