2012-07-05 102 views
15

我正在處理自託管的ASP.NET Web API應用程序。 一切工作正常,但現在我掙扎着HttpContextHttpSelfHostServer和HttpContext.Current

我需要保存來自客戶端的會話信息。 但HttpContext.Current始終爲空。 所以很明顯,我的HttpSelfHostServer不適用於靜態HttpContext類。

我不明白的是:爲什麼......? 而我不知道HtttpSelfHostServerHttpSelfHostConfigurationHttpContext一起工作的方式。

下面是我在做什麼:

  1. 創建HttpSelfHostConfiguration

    • 1.1添加Service-Resolvers & Routes
    • 1.2添加自定義UserNamePassword-Validator
  2. 創建HttpSelfHostServer的新實例配置

    • 2.1 server.OpenAsync().Wait()

任何幫助,我怎麼能告訴我的服務器HttpContext.Current工作是非常感謝! 乾杯!

+0

也許需要'AspNetCompatibility':http://stackoverflow.com/questions/5904313/access-httpcontext-current-from-wcf-web-service – mellamokb 2012-07-05 15:43:49

+0

嗨mellamokb。謝謝,但是如果我使用aspNetCompatibelity-Mode,我仍然需要一個IIS,這是我想避免的。 – Richard 2012-07-06 09:42:34

+0

另請注意,我發佈的鏈接中的第二個答案指的是OperationContext中提供的許多相同的信息。你究竟需要從HttpContext中獲得什麼? – mellamokb 2012-07-06 13:18:28

回答

26

您將無法在自託管環境中使用HttpContext。 HttpContext由ASP.Net管道設置,如果您不在IIS/ASP.Net下運行,則不會有此管道。

HttpContext僅在Web-Hosting模式下可用,其中HttpControllerHandler創建請求。

FYI-我請你閱讀佩德羅菲利克斯下面的大文章,以更好地瞭解不同的主機型號:

10

要解決這個問題(我發現我現在使用很多組件需要在Web API和MVC中同樣好),你可以試試這個老的sh即時通訊我寫道讓你回到一個類似於HttpContext的界面,這兩種界面都適用於這兩種風格。這是對的NuGet還,這裏的源: Link on github (或Link on Nuget

+0

感謝您抽出時間在此發佈此信息併發布到Github;我有一個遺留組件,它期望在當前線程的靜態變量中浮動,並且即使在SelfHost下,該Shim也會將其提交到提交中。奇蹟般有效! – 2015-10-06 13:02:48

+0

你提供的東西看起來很酷。但是,我無法看到它是否支持替換'HttpSession'對象 - 'HttpContext.Current.Session'似乎不可用。你的圖書館是否支持會話狀態?如果沒有,你能推薦任何方式來獲得會話狀態替換嗎?我可以使用'HttpContext.Current.Items'嗎? – 2015-10-17 22:43:51

+0

這不知怎的刪除了我的system.web.http 5.2.3.0引用並用4.0.0.0替換它,從它得到大量的構建錯誤 – 2017-09-20 06:44:34

相關問題