Обновление: В соответствии с его запросом ниже приведено более четкое объяснение того, чего я пытаюсь достичь, и описание контекста, в котором я работаю.
По сути, я делаю сайт, используя ASP.NET Core 2.1 с платформой Razor Pages, полностью настроенной с настройками по умолчанию для всего. Важным примечанием является то, что мне нужно использовать определенного внешнего поставщика в качестве службы управления данными приложения, и поэтому я не могу просто реализовать базу данных с ASP.NET. Из-за этого в коде на стороне сервера для большинства страниц я использую клиентский SDK для указанной службы управления, поскольку с ним проще взаимодействовать, чем с REST API. Проблема заключается в том, что я сталкиваюсь с проблемами параллелизма из-за того факта, что SDK был разработан для использования с одним сеансом за раз и, таким образом, предоставляет статические свойства, содержащие данные сеанса, такие как «текущий пользователь». Я спрашиваю, как я мог бы создать новый домен выполнения или памяти для каждого создаваемого сеанса, чтобы у каждого из них мог быть свой «текущий пользователь», или как я мог бы иначе решить кошмар параллелизма, который возникает, когда SDK используется для того, чтобы клиент имел дело только с одним пользователем и / или сеансом одновременно во всем бэкэнде. Мои предыдущие заметки о Blazor, где я пытался описать самый простой аналог, как я думаю, могли бы стать решением этой проблемы. Я слышал о хранении данных сеанса; однако, насколько мне известно, все должно быть сериализовано в JSON и где-то сохранено в файле, что не работает для меня, поскольку данные могут быть конфиденциальными.
Старое объяснение (все еще несколько релевантное): Я создаю веб-сайт на базе ASP.NET Core 2.1 и пытаюсь использовать 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 может быть изменен, но он все равно должен быть независимым от платформы для большинства экстентов. Заранее спасибо за помощь.