1

如何在 ashx 文件中创建 HTTPHandler PLACE 由 ASP.NET 管理的 SessionCookie?似乎 ashx-File 的调用没有放置 cookie,因此无法维护会话。

背景:我即将编写基于 HTTP 的 Web 服务包装器。不同的客户端调用我提供给他们的 URL 并带有给定的参数。我检查凭据,调用第 3 方 Web 服务并将更改的结果返回给客户端。第 3 方 Web 服务提供商通过合同要求为每个不同的客户端调用提供一个 SessionID。

解决方案:HTTPHandler 似乎是最好的选择。所以我创建了一个网站项目。不幸的是,直接调用 ashx-File 似乎不会将会话 cookie 添加到响应中,因此会为来自同一客户端的每次调用创建一个新的 SessionID。

我做了以下相关:

  • 实现标记接口 IRequiresSessionState 或/和 IReadOnlySessionState
  • 添加<sessionState mode="InProc" cookieless="false" timeout="20" /> 到 web.config
  • 在 Session_Start-Method HttpContext.Current.Session("init") = 0 的 Global.asax 文件中保存会话状态中的某些内容

不同的尝试,但应该避免:

  • 在调用 ashx 文件之前,调用 Default.aspx 文件会放置一个会话 cookie,因此会话会被维护。
  • 使用数据库和时间戳实现“自己的”会话。

版本:IIS 6.0

4

1 回答 1

0

IRequireSessionState并且IRequireReadOnlySessionState是互斥的。如果您打算以任何方式更新会话状态,则应该只实施前者。

于 2012-05-04T06:28:53.897 回答