2012-09-24 49 views
1

我有一個MVC網絡應用程序與另一個應用程序(非網絡)共享一些共同的代碼。ASP.NET MVC - 一些線程不擊中HttpModule

這兩個應用程序必須做的事情之一是連接到特定的數據存儲。非Web應用程序運行多個線程,每個線程都有一組不同的連接參數,因此通用代碼將每個連接標記爲「線程靜態」。因此,這個連接也必須是我的ASP.NET MVC應用程序的線程靜態的。

在我的web應用程序中,我使用了HttpModulecontext_BeginRequest打開連接,begin_EndRequest關閉連接。 (該連接在30秒後由數據存儲區自動關閉,因此無法無限期保持打開狀態)。

我的web應用程序似乎工作得非常好,除了它偶爾會拋出一個錯誤,說它無法使用連接。

我通過添加日誌記錄調查了這一點。我記錄了每個線程,因爲它碰到了context_BeginRequestcontext_EndRequest以及何時拋出異常。我發現這個錯誤是由我的應用程序中的一個線程拋出的,它從未打過HttpModule's context_BeginRequest。因爲它沒有打到,沒有連接被打開。

我的理解是,該線程應該已經打到HttpModule - 那爲什麼不呢?

如果我不能保證這種行爲,那麼你會建議什麼方法?

回答

0

這可能是由於在應用程序中的某處使用了異步代碼。

異步代碼使用的回調機制不保證與調用它的代碼在同一線程上運行。

您可以將線程同步上下文或簡單地將連接本身作爲參數傳入異步函數

+0

這不是答案。它應該是一個評論。 – ChrisF