2011-10-31 22 views
1

我有一個WCF服務託管在IIS上,並且與ASP.NET兼容模式。IIS中的WCF與ASP.NET兼容模式,HTTP請求線程不同於WCF服務操作

問題是我檢查了在Global.asax中處理的HTTP請求的線程與執行服務操作的線程不同。

如何讓服務操作在同一個HTTP請求線程中被調用?

預先感謝您。

UPDATE:

根本問題是在我正在使用HTTP模塊,以使一請求期間可用的一些對象,並且當一個響應將要被髮送的,這些是設置/釋放。

由於其中一些對象存儲在線程靜態字段中,因此無法在WCF服務操作中共享它們。

也許還有另一種方法。例如,在調用某個WCF服務操作之前執行某些操作,並在此之後結束。我會很感激任何建議。

+0

我不認爲你有任何控制線程親和力的服務操作執行。您試圖解決的根本問題是什麼? –

+0

@competent_tech檢查我的更新,並感謝你:) –

回答

2

因爲沒有直接控制運行時管理IIS管道和IIS管道之間的線程的方式,所以在線程變量中存儲任何東西是一個壞主意。

是否有可能使用Items容器?在ASP.NET兼容模式下,容器將在整個請求管道中可用。通過這種方式,您可以輕鬆地在其中存儲/檢索某些數據,而不必擔心資源消耗,因爲容器將在管道末端自動銷燬。

+0

謝謝你的回答,我出去了一天,幾個小時後我會檢查它。 –

+0

這是正確的答案,因爲我可以繼續使用HTTP模塊。謝謝! –

1

如果可能的話,我強烈建議將HTTPModule中的邏輯移動到由WCF服務調用執行的代碼中。我們爲每個服務調用執行並提供了通用的功能和驗證,並且爲了支持這一點,我們要求開發人員在每次服務調用開始時調用一個單一的常用方法。

由於額外的代碼,這不像HTTPModule解決方案那麼優雅,但是通過這樣做,我們最終爲每個具有衆所周知的設置和拆卸點的服務調用提供了一個很好的工作單元。

+0

謝謝你的回答,我出去了一天,在幾個小時內我會檢查它。 –

+0

再次感謝您,這只是另一種方法,但正如@Wiktor在他的回答中指出的那樣,我的問題有一個解決方法,並且工作正常。 –