3

我创建了一个大型应用程序,但现在遇到了问题。

我通过 virdirs 将客户分开,因此他们一直位于不同的应用程序池中。我利用了这一点,并在 session_start 上为 db 连接字符串和其他上下文内容设置了静态变量,并在我的整个应用程序中都可以使用它。

现在,我不得不创建大量的 virdir(超过 500 个并且还在快速增长),我觉得我需要将这些移到一个(或多个)应用程序池中。问题是我没有在整个应用程序中传递从 URL 获得的“会话上下文”。更改为应用程序以传递上下文基本上意味着我需要重写应用程序。

有没有一种方法可以为会话(即一次调用我的 API)而不是为整个应用程序域设置此上下文?非常感谢您的帮助!

上下文示例 - db con str - 客户日志文件夹

编辑:我在想我可能有一个表将上下文信息链接到线程 id (System.Threading.Thread.CurrentThread.ManagedThreadId)?

4

1 回答 1

1

“上下文”是什么意思?您是指请求/响应/会话信息吗?您不需要手动传递它们。在处理 http 请求期间,ASP.Net 框架以静态方式公开所有内容:

var ctx = System.Web.HttpContext.Current;
var req = ctx.Request;
var rsp = ctx.Response;
var sess = ctx.Session;
var cache = ctx.Cache;

var myOtherFoos = ctx.Items;

在 ASP.Net 应用程序中,只要您添加了对 System.Web 程序集的引用,就可以从任何地方访问静态 Current-Context。

如果您不是指“上下文”,而是指一些您自己需要与请求处理一起传递的附加信息,那么 HttpContext 的项目就是为此!它是在每个新请求时创建的新集合,您可以将其用作轻量级暂存器,以在单个请求处理期间保存您的东西。与 Cache 或 Session 不同,“Items”会在请求处理结束的那一刻消失,因此无需担心泄漏或与其他请求混合数据。请注意您选择的键,尽量不要与坐在那里的框架事物发生冲突:)

于 2013-03-28T00:26:11.700 回答