尝试获取与我们的经典 ASP.NET 应用程序一起使用的 Servicestack 的最新稳定版本 v5.11.0
Trying to get the latest stable release v5.11.0 of Servicestack working with our classic ASP.NET application
我正在尝试将我们的经典 ASP.NET 应用程序从 ServiceStack 3.9.64 一直升级到最新版本 5.11.0。该应用同时提供 ASPX 页面和 ServiceStack API 调用。我有很多代码依赖于 HttpContext.Current
在 ASP.NET 应用程序的上下文中可用,而不管是否正在访问 ASPX 页面,或者是否正在访问 ServiceStack 路由。到目前为止,这一直有效。
此处的示例:https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.AspNet 显示了对我来说非常不完整 的 global.asax.cs 示例。通常的 Application_BeginRequest
和 Application_EndRequest
方法完全没有了!这似乎表明 ServiceStack 现在完全在幕后做它自己的事情,与我们一直依赖的 HttpContext.Current
单例分离。
如何在不在我的代码中线程化 HttpContextBase 或 HttpRequestBase 对象的情况下解决这个问题?我们的 ASP.NET 应用程序当然会处理许多并发 HTTP 请求,并以 ASP.NET 风格的 'thread safe' 方式处理,我们从不使用 [ThreadStatic] 属性。我们依靠 HttpContext.Current 单身人士为我们做这件事。
Global.asax
的目的是使 ASP.NET 应用程序能够挂接到 ASP.NET Web 应用程序的不同生命周期事件。缺少事件挂钩实现并不以任何方式表示 ASP.NET 应用程序不完整或假定 ASP.NET 应用程序的功能的任何行为,除了它不需要或依赖那些生命周期事件.它当然不会暗示任何关于“与 HttpContext.Current 单例分离”的应用程序,这在 ASP.NET 应用程序中是不可能的,因为它在调用之前由 ASP.NET 框架自动填充应用程序 ASP.NET 处理程序。
仅实现了 Application_Start
事件,因为这是 ServiceStack ASP.NET 应用程序在启动 ASP.NET 应用程序时初始化 ServiceStack AppHost
所需的唯一事件:
protected void Application_Start(object sender, EventArgs e)
{
new AppHost().Init();
}
HttpContext.Current
单例在所有 ASP.NET 框架 Web 应用程序 中可用,它始终填充在 ASP.NET 的请求工作线程中要求。 ServiceStack 服务也不例外,因为它们像往常一样在 ASP.NET 请求工作线程上 运行 所以如果你 运行 你链接到的 Server.AspNet 并在服务实现您将能够像往常一样检查填充的 HttpContext.Current
单例:
HttpContext.Current
单例未在 ASP.NET 框架应用程序中填充的主要原因是它未在 ASP.NET 请求工作线程中访问,例如如果它是从后台线程访问的。
如果您指的是 ServiceStack 不使用的 ASP.NET 会话,则它们需要是 enabled with a Session HttpHandler Factory.
我正在尝试将我们的经典 ASP.NET 应用程序从 ServiceStack 3.9.64 一直升级到最新版本 5.11.0。该应用同时提供 ASPX 页面和 ServiceStack API 调用。我有很多代码依赖于 HttpContext.Current
在 ASP.NET 应用程序的上下文中可用,而不管是否正在访问 ASPX 页面,或者是否正在访问 ServiceStack 路由。到目前为止,这一直有效。
此处的示例:https://github.com/ServiceStackApps/HelloMobile/tree/master/src/Server.AspNet 显示了对我来说非常不完整 的 global.asax.cs 示例。通常的 Application_BeginRequest
和 Application_EndRequest
方法完全没有了!这似乎表明 ServiceStack 现在完全在幕后做它自己的事情,与我们一直依赖的 HttpContext.Current
单例分离。
如何在不在我的代码中线程化 HttpContextBase 或 HttpRequestBase 对象的情况下解决这个问题?我们的 ASP.NET 应用程序当然会处理许多并发 HTTP 请求,并以 ASP.NET 风格的 'thread safe' 方式处理,我们从不使用 [ThreadStatic] 属性。我们依靠 HttpContext.Current 单身人士为我们做这件事。
Global.asax
的目的是使 ASP.NET 应用程序能够挂接到 ASP.NET Web 应用程序的不同生命周期事件。缺少事件挂钩实现并不以任何方式表示 ASP.NET 应用程序不完整或假定 ASP.NET 应用程序的功能的任何行为,除了它不需要或依赖那些生命周期事件.它当然不会暗示任何关于“与 HttpContext.Current 单例分离”的应用程序,这在 ASP.NET 应用程序中是不可能的,因为它在调用之前由 ASP.NET 框架自动填充应用程序 ASP.NET 处理程序。
仅实现了 Application_Start
事件,因为这是 ServiceStack ASP.NET 应用程序在启动 ASP.NET 应用程序时初始化 ServiceStack AppHost
所需的唯一事件:
protected void Application_Start(object sender, EventArgs e)
{
new AppHost().Init();
}
HttpContext.Current
单例在所有 ASP.NET 框架 Web 应用程序 中可用,它始终填充在 ASP.NET 的请求工作线程中要求。 ServiceStack 服务也不例外,因为它们像往常一样在 ASP.NET 请求工作线程上 运行 所以如果你 运行 你链接到的 Server.AspNet 并在服务实现您将能够像往常一样检查填充的 HttpContext.Current
单例:
HttpContext.Current
单例未在 ASP.NET 框架应用程序中填充的主要原因是它未在 ASP.NET 请求工作线程中访问,例如如果它是从后台线程访问的。
如果您指的是 ServiceStack 不使用的 ASP.NET 会话,则它们需要是 enabled with a Session HttpHandler Factory.