2014-06-24 50 views
1

我有一個奇怪的問題,在一組接收位置上使用WCF-SQL適配器之前我沒有見過。BizTalk 2010 WCF-SQL適配器XML輪詢問題

設置是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分鐘。

回答

2

所以很明顯,這是因爲我有useAmbientTransaction標誌設置爲false在接收位置。我將該標誌設置爲false的原因是因爲當數據庫設置爲true時出現數據庫無法到達的錯誤,並且/或者消息已關閉錯誤。這種情況不時發生,因爲該設置看起來很麻煩。

總之,Ambient Transactions導致錯誤,所以我將其關閉。這導致pollDataAvailableStatement被跳過,並且EXEC語句在每個輪詢間隔運行。該存儲過程我打電話有一個參數,所以我改變了exec語句使用參數的名稱,以及價值爲這樣:

EXEC dbo.StoredProc @FeedType='DIABETES' 

這種固定環境事務錯誤的問題,我能夠設置標誌變回true,現在pollDataAvailableStatement按預期工作。希望這可以幫助別人。

+0

可以在這裏真正找到MSDN文檔這樣的:http://msdn.microsoft.com/en-us/library/dd787981.aspx 我有一個取巧的辦法來管理和容易錯過: ...您爲此綁定屬性(PollingDataAvailable語句)指定的語句不會在適配器啓動的事務中執行......這意味着何時UseAmbientTransaction = false –

+0

事實上,在我終於意識到發生了什麼之後,我實際上還記得那一點。但奇怪的問題是,當AmbientTransactions設置爲true時,我將如何得到隨機錯誤(如未找到數據庫的網絡名稱)。奇怪的是,只需更改exec語句以使用參數名稱就可以修復它。不知道爲什麼。 – Ritley572