无法访问wcf服务中的asp.net会话

时间:2012-06-19 16:59:29

标签: asp.net wcf session jquery

我正在尝试在WCF服务中访问asp.net会话。我正在从我的asp.net应用程序调用{​​{1}}到wcf服务。我已经通过许多SO问题和文章,并尝试了他们所说的一切,但我仍然无法访问wcf服务中的客户端会话。当我写jQuery AJAX时,DataSet ds = HttpContext.Current.Session["data"] as DataSet;始终为空。

我在这里缺少什么?

这就是我的WCF服务的样子: //接口

ds

//服务

[ServiceContract(SessionMode = SessionMode.Allowed)]
public interface IMyService
{
    [OperationContract(IsInitiating=true)]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    string GetData();

    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
    bool SaveData(string data);
}

我正在[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class MyService : IMyService { public string GetData() { return "something"; } public bool SaveData(string data) { DataSet ds = HttpContext.Current.Session["data"] as DataSet; return true; } } session_start创建一个数据集并将其放入会话中,这样只要用户会话有效,我就可以在整个应用中使用它。

Global.asax

这就是我的wcf项目 protected void Session_Start(object sender, EventArgs e) { DataSet ds = new DataSet(); //Table to hold Product Selection DataTable dt = new DataTable("T1"); dtSSNCertification.Columns.Add("Col1"); ds.Tables.Add(dt); Session.Add("data", ds); } 的样子:

web.config bindings

                   

  <service name="MyService">
    <endpoint address="" behaviorConfiguration="JSONPBehaviorConfiguration"
      binding="customBinding" bindingConfiguration="jsonpBinding"
      contract="IMyService">
    </endpoint>
  </service>

1 个答案:

答案 0 :(得分:5)

要使用ASP.NET功能,您需要启用与WCF的ASP.NET兼容性。在你的web.config中设置:

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