更新:根据它的要求,以下是对我想要实现的目标的更清晰的解释,以及对我工作环境的描述。
本质上,我正在使用带有 Razor Pages 框架的 ASP.NET Core 2.1 创建一个网站,完全使用默认设置进行配置。重要的一点是,我需要使用特定的外部提供程序作为应用程序的数据管理服务,因此不能只使用 ASP.NET 实现数据库。因此,在大多数页面的服务器端代码中,我将客户端 SDK 用于所述管理服务,因为它比 REST API 更容易交互。问题是我遇到了并发问题,因为 SDK 被设计为一次用于一个会话,因此暴露了包含会话数据的静态属性,例如“当前用户”。我要问的是如何为每个创建的会话创建一个新的执行或内存域,这样每个人都可以拥有自己的“当前用户”,或者我如何解决使用 SDK 时出现的并发噩梦,该 SDK 旨在让客户端一次处理一个用户和/或会话整个后端。我之前关于 Blazor 的笔记试图描述我认为可以解决这个问题的最简单的模拟。我听说过存储会话数据;但是,据我所知,所有内容都必须序列化为 JSON 并存储在某个文件中,这对我不起作用,因为数据可能是机密的。我之前关于 Blazor 的笔记试图描述我认为可以解决这个问题的最简单的模拟。我听说过存储会话数据;但是,据我所知,所有内容都必须序列化为 JSON 并存储在某个文件中,这对我不起作用,因为数据可能是机密的。我之前关于 Blazor 的笔记试图描述我认为可以解决这个问题的最简单的模拟。我听说过存储会话数据;但是,据我所知,所有内容都必须序列化为 JSON 并存储在某个文件中,这对我不起作用,因为数据可能是机密的。
旧解释(仍然有些相关):我正在创建一个由 ASP.NET Core 2.1 提供支持的网站,并尝试使用一个 SDK,该 SDK 旨在用于AppDomain
一个特定应用程序实例和/或会话所独有的;这意味着 SDK 有多个 API,它们公开静态的数据存储成员(字段、属性等)。就将这样的 SDK 与 ASP.NET Core 一起使用而言,这种暴露结构似乎是一个问题,因为运行时只分配一个单一的AppDomain
,在服务器端,所有会话共同共享,因此可能有多个单独的用户共享。如果我无权访问此 SDK 的源和/或无法更改它,出于与平台无关的目的,我如何成功使用 SDK,而不能一次只能存储一个会话的数据。这是我正在使用的简化版本:
示例 API:
public sealed class User
{
public static User ActiveUser { get; private set; }
public static int TotalLogCyclesThisSession { get; private set; } = 0
public string Username { get; internal set; }
private string Password { get; internal set; }
public string Name { get; internal set; }
public string AccessKey { get; }
public User(string username, string password)
{
/* Populate Instance Properties with Relevant Data */
ActiveUser = this;
}
public void Logout()
{
/* Clear Data from Settable Instance Properties */
ActiveUser = null;
TotalLogCyclesThisSession++;
}
}
假设静态变量也在 SDK 的其他地方使用。
所以基本上,如果上面的 API 是真实的,我将如何在 ASP.NET Core 中使用它,以便每个会话都有自己的完整 SDK 副本可供使用,包括会话特定的静态变量。如果可能的话,我正在寻找诸如如何创建 Blazor“客户端”程序集、AppDomain
每个会话都有一个新程序集和“服务器”程序集之类的东西,尽管我知道 Blazor 实现的解决方案可能不适用,考虑到它还具有活动的浏览器本地运行时,而 ASP.NET Core 没有。在最坏的情况下,可以修改 API,但在大多数情况下它仍然必须与平台无关。提前感谢所有帮助。