2010-11-22 91 views
2

HttpContext.Current.Request.ServerVariables [ 「SERVER_PORT」] HttpContext.Current.Request.ServerVariables [ 「SERVER_PORT_SECURE」] HttpContext.Current.Request.ServerVariables [ 「SERVER_NAME」] HttpContext.Current.Request .ApplicationPathHttpContext的用於web服務

我希望通過webservice -C#訪問這些值,只要我在webservice中調用這些值,我對上述所有內容都獲得null,其中上述方法適用於網頁(aspx)。

+0

你可以嘗試添加[WebMethod(EnableSession:= True)]到你的web方法。我還沒有嘗試過! – genericuser 2010-11-22 22:41:56

+0

[Webmethod使用HttpContext返回空引用異常]的可能重複。(http://stackoverflow.com/questions/4250129/webmethod-using-httpcontext-returns-null-reference-exception) – 2010-11-22 23:39:11

回答

2

你在使用什麼樣的網絡服務? asmx或wcf?他們能很好地工作ASMX服務,但如果你使用WCF,你需要將以下屬性添加到方法:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
1

如果它是一個WCF Web服務,您可以執行以下操作:

[AspNetCompatibilityRequirementsAttribute(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 
public class FooBar : IFooBar 
{ 
    public void DoSomething() 
    { 
     HttpContext context = HttpContext.Current; 
     if (context != null) 
     { 
      // Should get here now 
     } 
    } 

} 

關鍵是要加[AspNetCompatibilityRequirementsAttribute(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

3

正如其他人所說的,您需要啓用ASP.NET兼容性。您也可以通過配置實現這一點,如果你不想通過屬性來限制你的代碼如下所示:

<system.serviceModel>   
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 

Here's a great resource,幫助我解釋通過啓用兼容模式所作的基本功能和取捨。

1

您是否嘗試用EnableSession來定義您的方法爲true?

[WebMethod(EnableSession = true)] 
    public string your_public_method(your_params) 
    { [...] }