2012-04-05 53 views
0

我有一個.NET 4.0 ASP.NET MVC應用程序,它也承載了Workflow Foundation 4.0。在這個工作流程中,一些自定義工作流活動將執行代碼,以使用Linq to SQL進行一些數據庫更新。代碼包括調用一個方法,該方法又調用一些其他方法等......我也有一個業務層,它有一個數據訪問工廠,提供對包含數據庫操作方法的所有數據訪問對象的訪問。從工作流活動中訪問當前的HttpContext?

現在假設我的WF活動調用方法A,而方法A又調用另一個類中的方法B,該方法在另一個類中調用方法C結束D.在每個這些方法中,我想檢索我的數據訪問工廠的同一個實例,以便所有數據庫操作都在相同的數據庫事務中執行。我將如何爲我的數據訪問工廠設計單例模式?請注意,方法A,B,C和D也可以從Asp.Net MVC控制器調用。當方法A,B,C和D從asp.net mvc控制器中調用時,很容易,我可以使用HttpContext來存儲我的數據訪問工廠單例,這樣在一個http請求中我也可以得到相同的實例我的數據訪問工廠。

但是,當從Workflow活動調用這些方法時,當然沒有HttpContext。我嘗試了線程靜態變量,但在Web應用程序中您不確定,方法A,B,C和D將在同一個線程中調用。我也嘗試過CallContext,但我經歷過,我並不總是檢索同一個實例,所以顯然CallContext也不是解決方案。

基本上,這個問題可以概括爲'在asp.net應用程序中運行的後臺進程中獲取對象的相同實例'(無論此後臺任務是由WF活動啓動還是另一種背景任務的方式,例如使用任務<T>)

+0

看看我在那裏做了什麼? – Will 2012-04-09 11:39:54

回答

1

與您的問題並不真正相關,但在asp.net應用程序中執行後臺任務非常糟糕,我從經驗中講述。

The Dangers of Implementing Recurring Background Tasks In ASP.NET

+0

所以正確的解決方案是(如果我正確理解文章)作爲Windows服務託管的WCF服務?我可以使用相同的Windows服務來承載工作流主機嗎? – rekna 2012-04-05 23:00:49

+0

http://msdn.microsoft.com/en-us/library/ms733069.aspx - 看起來像是可能的。我從來沒有做過 – 2012-04-06 13:42:10

1

因爲你的對象需要跨越進程和內存空間,我會創建承載您的工廠作爲單一實例的WCF服務。這樣,MVC應用程序就可以調用它並且WF應用程序可以調用它。

+0

WCF服務中的單例不會工作,因爲每個調用都會收到dao工廠的同一個實例。一個dao工廠與一個交易相關聯,所以不同的wcf調用會干擾其他交易。所以在WCF服務中,我必須使用CallContext? – rekna 2012-04-05 22:56:09

0

我知道這是舊的,但我想這也會有所幫助。

HttpContext.Current is null when checked on interceptor

其上運行的工作流服務時(.xamlx),要利用的OperationContext與實體對象。

+0

此外,請參閱http://stackoverflow.com/questions/1895732/where-to-store-data-for-current-wcf-call-is-threadstatic-safe 這提供了工作流WCF的.Items字典對象。存儲每個WCF實例的實體上下文 – user959729 2012-08-14 14:55:21

相關問題