用于Web服务的HTTPContext

时间:2010-11-22 22:25:59

标签: c# web-services

HttpContext.Current.Request.ServerVariables [ “SERVER_PORT”] HttpContext.Current.Request.ServerVariables [ “SERVER_PORT_SECURE”] HttpContext.Current.Request.ServerVariables [ “SERVER_NAME”] HttpContext.Current.Request.ApplicationPath

我希望通过webservice -C#访问这些值,每当我在webservice中调用这些值时,我对以上所有内容都是null,如上所述适用于网页(aspx)。

4 个答案:

答案 0 :(得分:3)

正如其他人所提到的,您需要启用ASP.NET兼容性。如果您不想通过以下属性限制代码,也可以通过配置启用此功能:

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

Here's a great resource帮助向我解释了启用兼容模式所带来的基本功能和权衡。

答案 1 :(得分:2)

您使用的是哪种网络服务? asmx还是wcf?它们应该可以与asmx服务一起使用,但如果您使用的是WCF,则需要在方法中添加以下属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

答案 2 :(得分: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 :(得分:1)

您是否尝试使用EnableSession定义您的方法为真?

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