0

所以,我在同一台机器上有 asp.net 应用程序和 wcf 服务。我正在尝试在他们之间共享 asp.net 会话。我已经配置了 Sql server 来存储我的会话数据。我在 tempdb 中有 ASPState Db 和两个表:ASPStateTempSessions, ASPStateTempApplications 并且都有数据行。在我添加的 asp.net 应用程序和 wcf 服务配置中:

<sessionState mode="SQLServer" sqlConnectionString="Data Source=localhost;integrated security=True;Application Name=app" />

在 Asp.net 应用程序中,我这样设置用户

HttpContext.Current.Session["User"] = userName;

在日志中,我看到了一个实际设置用户的条目。(并通过 JS 检查)

在 wcf 服务中:

[ServiceContract(SessionMode = SessionMode.Allowed)]
    public interface IDbWebService
    {
        [OperationContract]
        [WebInvoke]
        Data GetBlahBlah(string env);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public partial class WebService : IDbWebService
    {
          public  Data GetBlahBlah(string env)
          {
                 //trying to get data here, nothing, just null
                _log.InfoFormat("USER: {0}", HttpContext.Current.Session["User"]); 

          }
}

但我无法获得会话 [“用户”]。

我做错了什么,也许我错过了一些明显的东西?

提前致谢!

4

1 回答 1

0

看到这个帖子:

使用 ASP.NET/SQL Server 丢失会话状态

确保您的应用程序 ID 在 IIS 管理器中相同,并且您在两个配置中设置了相同的机器密钥。两者都用于会话状态的生成和加密,因此如果它们不同,您将无法共享会话条目。

另外,依靠会话状态在应用程序和 Web 服务之间传递信息似乎违反了分层责任模式。您的 Web 服务现在依赖客户端通过此后门方式提供数据,而这些数据在服务合同的任何地方都没有体现。另一个使用该服务的客户端必须以相同的方式提供数据才能使服务正常运行。是否有原因无法在方法签名中提供数据?

于 2013-06-13T20:12:09.890 回答