C# ASP和WCF之间的会话共享
我们尝试为ASP应用程序和WCF服务共享同一会话。 在过去,我们建立了一个POC,它工作正常。我们能够在ASP和WCF中使用相同的会话。但是现在,当我们尝试在当前项目中实现POC时,我们无法检索相同的会话 我们的做法是: 1) 由powershell命令启用的会话 2) 向web.config添加值C# ASP和WCF之间的会话共享,c#,asp.net,wcf,session,ninject,C#,Asp.net,Wcf,Session,Ninject,我们尝试为ASP应用程序和WCF服务共享同一会话。 在过去,我们建立了一个POC,它工作正常。我们能够在ASP和WCF中使用相同的会话。但是现在,当我们尝试在当前项目中实现POC时,我们无法检索相同的会话 我们的做法是: 1) 由powershell命令启用的会话 2) 向web.config添加值 同样的机关枪 相同会话状态(SQLServer模式) 相同的httpModule(配置相同的会话、会话应用程序) 相同的模块(指向与httpModule相同的模块) 此外: 在ASP和WCF
- 同样的机关枪
- 相同会话状态(SQLServer模式)
- 相同的httpModule(配置相同的会话、会话应用程序)
- 相同的模块(指向与httpModule相同的模块)
- 在ASP和WCF上,我们都有一个会话(来自HttpContext.Current.session),但它们是不同的(例如 示例sessionID不同)
- 调试时,模块仅在ASP端触发,因此WCF中可能存在问题
- 我们在应用程序中使用Ninject(不在POC中),但在引导程序中绑定模块
public class SharedSessionModule : IHttpModule
{
public void Init(HttpApplication context)
{
try
{
string appName = Configuration.Session.AppName;
if (string.IsNullOrEmpty(appName)) return;
var runtimeInfo = typeof (HttpRuntime).GetField("_theRuntime", BindingFlags.Static | BindingFlags.NonPublic);
var theRuntime = (HttpRuntime) runtimeInfo.GetValue(null);
var appNameInfo = typeof (HttpRuntime).GetField("_appDomainAppId", BindingFlags.Instance | BindingFlags.NonPublic);
appNameInfo.SetValue(theRuntime, appName);
}
catch (Exception ex)
{
//Logging
}
}
public void Dispose()
{
// Nothing to dispose.
}
}
有人知道问题出在哪里吗?(我想可能是在我使用Ninject,WCF时)什么是POC?概念证明?那么,这是两个不同的应用程序,还是在同一个应用程序中有WCF?另外,如果sessionid不同,您希望如何共享会话?什么客户端同时称ASP和WCF(同一个客户端或两个不同的客户端)?POC=概念验证。这些是针对不同的应用程序的,运行在不同的应用程序池中。更具体地说,ASP.NET实际上是一个SharePoint网站。问题是sessionID的值是相同的。如果应该共享同一个会话,则sessionID应该相同,但在本例中它们不相同。同一客户端同时调用ASP和WCF。更具体地说:用户调用ASP,但是在页面上,有对WCF/REST服务的ajax调用来检索数据。