2009-12-03 37 views
1

我最近遇到了BizTalk映射器的多線程性質以及它如何處理外部程序集的問題。BizTalk映射器和[ThreadStatic]屬性

由於從MSDN這句話表明:

重要寫在 外部組件,用於在 腳本functoid需要是線程安全的 使用任何代碼。這是必需的,因爲 地圖的多個實例可以在運行時使用 這些.NET實例在 壓力條件下。

Mapper將重新使用外部程序集的實例。

在我的團隊是使用應用組件,我們有下面的代碼:

public class MapUtil 
{ 
    private string _storeReference; 

    public void SetStoreReference(string ref) 
    { 
     _storeReference = ref; 
    } 

    public string GetStoreReference() 
    { 
     return _storeReference; 
    } 
} 

這是從一個文件導致storereferences映射到不同的文件。

我(似乎)被裝飾的私人領域與[ThreadStatic]

[ThreadStatic] 
private static string _storeReference; 

我的問題是有固定的這個 - 沒有人知道在BizTalk映射任何與此問題?我知道在Asp.Net中存在使用[ThreadStatic]的問題,因爲線程被重用,但在BizTalk映射器處理線程的方式中找不到任何文檔。

回答

0

我還沒有找到一個明確的說法'在BizTalk映射器內的線程行爲是xyz,所以你應該照顧你使用方法abc',我不確定這樣的答案是否會來自BizTalk產品團隊之外的任何地方。

我的一位與產品團隊有直接聯繫的同事正在延長聖誕假(幸運狗),所以直到他回來時,我纔想到我會注意到,隨着對代碼的更改,我們還沒有看到大批量生產服務器上的線程問題。

那麼 - 這不是真的,我設法錯過了我的助手類的一個屬性的static關鍵字,對於那個屬性,我們仍然看到了線程問題。我會以此作爲ThreadStatic是現在正確的方式的證明。

1

我已經使用ThreadStatic來設置一個變量是自定義接收管道,然後在BizTalk Map中通過一個輔助類來訪問它的值。到目前爲止還沒有出現任何問題 - 並行測試了大約50次調用。