none
wcf中使用httpcontext.current.session 不行 RRS feed

  • 问题

  • wcf中使用httpcontext.current.session 不行

    wcf :webHttpBinding绑定

    index.html页面中使用jquery调用wcf的,主要这个功能是实现“ 注册会员手机验证功能”

    wcf端使用HttpContext.Current.Session记录“手机验证码”

    请求客户端手机验证码时候,wcf把当前手机号跟验证码写到session中,客户端验证码时候,再次与wcf通信,读取session时候就为null了。

    这是为什么呀?


    认真学习,不耻下问.^_^

    2012年5月21日 6:36

答案

全部回复

  • ASP.NET会话(Session)的实现很简单,就是让每次HTTP请求携带Session的识别信息(Session ID),那么服务就可以根据此信息判断请求来自哪个客户端了, 关于Session识别信息的保存,ASP.NET有两种方式:Cookie和URL,一般是用Cookie,你是不是每次请求都没有携带Cookie以致服务端认为每次都是一个新的客户端的请求,所以你访问不到之前保存在Session中的内容,另外Wcf要访问Session,需要使用Aspnet兼容模式

    AndersTan

    2012年5月22日 2:31
  • 1.配置文件

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

    2.代码服务配置属性

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]

    public class CalculatorService : ICalculatorSession

    {//Implement calculator service methods.}


    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2012年5月22日 8:03
    版主
  • ASP.NET会话(Session)的实现很简单,就是让每次HTTP请求携带Session的识别信息(Session ID),那么服务就可以根据此信息判断请求来自哪个客户端了, 关于Session识别信息的保存,ASP.NET有两种方式:Cookie和URL,一般是用Cookie,你是不是每次请求都没有携带Cookie以致服务端认为每次都是一个新的客户端的请求,所以你访问不到之前保存在Session中的内容,另外Wcf要访问Session,需要使用Aspnet兼容模式

    AndersTan

    您好,感谢您的回答!  同时也感谢 老徐

    "Cookie和URL,一般是用Cookie,你是不是每次请求都没有携带Cookie以致服务端认为每次都是一个新的客户端的请求,所以你访问不到之前保存在Session中的内容"

    请问如何   “ 携带Cookie"


    认真学习,不耻下问.^_^

    2012年5月22日 10:15
  • 老徐 ,您好!我服务如下:

    Allowed: 不行吗?    由于我的页面是.html

      [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Test{

    /////////

    }


    认真学习,不耻下问.^_^

    2012年5月22日 10:17
  • 刚才试了一下两位说的,还是不行(第二次访问session==null)

     [ServiceContract(Namespace = "")]
        [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession, ConcurrencyMode = ConcurrencyMode.Single)]
        public class Services
        {
    [OperationContract]
            [WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public string AddS(string m)
    {
      System.Web.HttpContext.Current.Session[m] = "123";
    return ""
    }
    
    
    [OperationContract]
            [WebGet(ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    public string GetS(string m)
    {
    ///这里第二次访问时就是 null,为什么呀
      if (HttpContext.Current.Session[m] != null)
                    {}
    else
    {//////
    return "empty!";
    }
                       
    }
    
    
    }

    <webHttpBinding>
            <binding name="WebBinding" allowCookies="true"></binding>
          </webHttpBinding>
    
    
    ......
    
    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>

    2012年5月22日 14:04
  • 2012年5月23日 2:01
  • 你在WCF服务操作里 给Session 一个值, 然后在ASPx页面的后台代码里 看看那可以访问到值不

    Frank Xu Lei--谦卑若愚,好学若饥
    [老徐的网站]:http://www.frankxulei.com/

    [老徐的博客]:http://54peixun.com/Author/frankxulei
    微软WCF中文技术论坛
    微软WCF英文技术论坛

    Windows Azure中文技术论坛

    2012年5月23日 3:28
    版主