2011-07-27 64 views
0

我有一個在服務器上編譯的asp.net項目。在同一臺服務器上,我有一個正在運行asp.net.dll引用的方法的windows服務。如何從服務訪問asp.net庫時啓動當前的httpcontext?

除了當httpcontext.current對象需要訪問時,一切正常。

我相當確定.current爲null的原因是它引用了共享庫而沒有運行實際的站點實例。在以前的服務版本中,我能夠通過不使用上下文在asp.net中找到解決方法,但是現在這是網站體系結構發生變化的最後一招。

是否有無論如何創建該網站的一個實例,併爲服務的目的模擬當前的httpcontext?

+1

沒有HttpContext,因爲你不在http上下文中。沒有正在進行的請求和響應,就Windows服務而言,您甚至沒有網站。你會如何期待它的工作? – driis

回答

1

ASP.NET框架實例化和管理HTTP上下文,並且在ASP.NET之外,它將始終爲空。你不得不深入研究如何創建它,但老實說,它不值得...

但是,你能重新配置你的HttpContext引用指向HTTpcontextbase嗎?如果你這樣做了,HttpContextBase是一個基類,可以被任何人繼承。很容易,你可以創建一個自定義的實現你想要的。你甚至可以創建你自己的靜態來包裝HttpContext.Current,在應用中引用這個靜態,並且在服務中引用這個靜態(但是讓服務最初實例化它)。

HTH。

+0

感謝您的意見。我正在考慮添加一個web服務到asp.net項目,並嘗試以這種方式拉取數據。這是你可能推薦的嗎? – Javier

+0

HttpContext.Current可用於Web請求,所以是的,這將工作。我的解決方案是,如果你沒有其他的選擇,需要離線做點什麼。建議使用@Patricker提供的Web服務。 –

+0

好吧,我最終添加了一個web服務,它都完成了。謝謝。 – Javier

0

不是從windows服務。我認爲這樣做的正確方法是創建一個web服務來處理任何你需要asp.net並從你的windows服務調用web服務。另外,如果您發佈了一些依賴於httpcontext.current的代碼,可以找到替代方案(假設他們確實不依賴於請求/響應操作)。

相關問題