我正在尝试在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>
答案 0 :(得分:5)
要使用ASP.NET功能,您需要启用与WCF的ASP.NET兼容性。在你的web.config中设置:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">