Silverlight,WCF AspNetCompatibilityRequirements和ASPNET会话状态未共享

时间:2009-10-06 11:11:01

标签: wcf silverlight session

我有一个Silverlight应用程序,在一个按钮上打开一个新的浏览器窗口中的aspx页面。

我想将一些用户名/密码详细信息从Silverlight传递到aspx页面。我的理解是我应该使用WCF服务来设置会话状态,然后可以从aspx页面检索它。

我遵循了我认为正确的步骤,但aspx页面拒绝查看Silverlight设置的状态。

我所做的是;

  • 创建了一个设置System.Web.HttpContext.Current.Session [“Thing”]
  • 的WCF服务
  • 在该服务上,设置AspNetCompatibilityRequirements = Required并在web.config上设置aspNetCompatibilityEnabled =“true”

我的Silverlight应用程序能够成功使用此WCF服务设置(和检索)会话信息。

然而,当我在aspx页面上获得Session [“Thing”]时,它是空白的。另外,如果我在aspx页面上设置Session [“Thing”],Silverlight就不会得到它。

就好像这两个人有不同的会话 - 为什么会这样?

提前致谢 马特

2 个答案:

答案 0 :(得分:0)

据我所知,如果您在新的浏览器窗口中打开该页面,它将创建一个新会话。您分享会话的唯一希望是在Web服务器级别创建一个共享对象(丑陋)。

为什么不直接将状态作为查询字符串传递?或者使用SL在HtmlHost link text元素中打开页面?

答案 1 :(得分:0)

您的Silverlight客户端与之通信的WCF服务是否可能位于不同的Web应用程序中(即,是否存在多个Web项目)?默认的进程内状态提供程序实际上是每个应用程序域,因此如果它们位于不同的应用程序中,您将在两个应用程序域中拥有两个会话状态副本。如果是这种情况,只需将服务代码移动到与页面相同的webapp中,生活就很好。我想不出任何其他的解释 - 我已经做了很多次没有遇到麻烦。