我有一个奇怪的问题,在一组接收位置上使用WCF-SQL适配器之前我没见过。
设置是BizTalk 2010中的一个接收端口,具有3个单独的接收位置。每个接收位置使用不同的参数调用相同的存储过程,execute语句如下所示:
EXEC dbo.StoredProc 'WELLNESS'
EXEC dbo.StoredProc 'DIABETES'
EXEC dbo.StoredProc 'SCREENINGS'
存储的proc在传递参数时完全按预期工作,并使用FOR XML PATH返回XML。这里的一切都很好。
我遇到的问题似乎与这些接收位置中的pollDataAvailableStatement有关。无论我做什么,所有3都返回" 1"到BizTalk开始所有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以执行存储的proc。即使我只为数据库中的WELLNESS接收位置设置了标志,polling语句也会为所有3返回true,我对此感到困惑。我之前从未遇到过这种情况,我在许多其他BizTalk应用程序中使用相同的设置而没有任何问题。
其他信息,我正在使用XmlPolling。我试图将pollWhileDataFound设置为True和False并注意相同的行为。轮询间隔为600秒(我也尝试了3600秒)。并且所有SQL超时都是40分钟。
答案 0 :(得分:2)
显然这种情况正在发生,因为我在接收位置将useAmbientTransaction标志设置为false。我将标志设置为false的原因是因为我在获取数据库时无法将错误设置为true,并且/或者消息是关闭错误。这种情况经常发生,因为这种设置似乎有些错误。
简而言之,Ambient Transactions导致错误,因此我将其关闭。这导致pollDataAvailableStatement被跳过,EXEC语句在每个轮询间隔运行。我调用的存储过程有一个参数,所以我更改了exec语句以使用参数名称和值,如下所示:
EXEC dbo.StoredProc @FeedType='DIABETES'
这解决了Ambient Transaction错误的问题,我能够将该标志设置回true,现在pollDataAvailableStatement正在按预期工作。希望这有助于其他人。