2011-03-31 23 views
2

我有兩個問題:如何設置ServiceHostingEnvironmentSection.AspNetCompatibilityEnabled通過代碼在C#

  1. 我有一個控制檯應用程序託管WCF服務,如果我設置ServiceHostingEnvironmentSection.AspNetCompatibilityEnabled爲真,可我在控制檯應用程序中訪問HttpContext.Current.Session
  2. 如果我可以在控制檯應用程序訪問HttpContext.Current.Session,如何設置通過代碼ServiceHostingEnvironmentSection.AspNetCompatibilityEnabled

請注意,我用的是WsHttpBinding的

回答

1

據我所知,並提出在最簡單的形式:

  • 不和,
  • 沒有,你不能。

要闡述了一下,ServiceHostingEnvironment類包含AspNetCompatibilityEnabled(見here瞭解詳細信息),並且只gettable,不可設置。

這將導致人們假設 - 相當可靠 - 你不能這樣做。有些專家可能知道另一種方法,但是,我高度懷疑它,因爲這是一種配置,我認爲需要在服務器上執行應用程序時進行評估,而不是在執行期間進行評估。

也可以使用匯編(通過裝飾具有AspNetCompatibilityRequirements屬性的元素)來配置類型;但這可能與目前的配置文件設置完全一致。

如需進一步閱讀,請查看this article

+0

mmmm,我可以在Web應用程序中設置一個變量,並在wcf服務中讀取它,同時考慮到我有多個來自不同客戶端的服務的調用。 – 2011-03-31 09:53:38

+0

在什麼情況下?您可以創建服務中所需的Web應用程序類型的實例,但這意味着一個新變量 - 根本沒有任何幫助。否則,您可能會公開一個Web方法將變量值傳遞給已驗證的調用者? – 2011-03-31 10:05:49

1

我不認爲你可以。

AspNetCompatibilityEnabled設置將讓你訪問當前申請的HTTP上下文如果是IIS內舉辦一個http WCF Web服務。你的不是在IIS中託管的,因爲它是一個控制檯應用程序。

我不認爲在控制檯應用程序中能夠達到HttpContext.Current.Session真的沒有任何意義(據我所知,無論如何)。你試圖達到誰的會話(或上下文)?您的服務器上可能有許多網站,每個網站都有自己的上下文。您的控制檯應用程序實際上並不涉及任何這些。

更多的可以閱讀關於這個設置大約一半下來this頁面。