Общая переменная между приложениями в одном и том же AppPool?
Я использую Asp.net
FW 4.6.
У меня есть два приложения в одном пуле приложений, которые должны читать (постоянно) предопределенное значение, которое является объектом для изменения.
Статические переменные не могут использоваться в разных приложениях beucase (даже в одном пуле приложений) - не будут совместно использоваться.
DB / File / Server-это известные параметры.
Но:
Вопрос:
Есть ли какой-либо код, который я могу написать, который может хранить в mem значение, которое будет доступно через несколько приложений, которые находятся в одном пуле приложений ?
Что-то вроде:
MyAppPool
App1 -> func("royi") = 1
App2 -> var a= func2("royi"); //1
1 ответ:
Все способы межпроцессной связи, такие как сопоставленные файлы памяти и именованные каналы, также могут использоваться для обмена данными между приложениями в пределах одного AppPool, см., например, совместное использование памяти между двумя приложениями.
Поскольку все приложения в одном и том же пуле приложений находятся в одном и том же процессе и разделены только границами домена приложений, у вас есть некоторые дополнительные опции:
- использование MarshalByRefObject для доступа к экземпляру объекта через Границы домена приложения. Есть уже доступные оболочки, использующие MarshalByRefObject для реализации кросс-домен синглтон, например Стивен Клири ' s CrossDomainSingleton или Это один .
- используйте указатели инебезопасный Код для прямого доступа к памяти, выделенной маршалом .AllocHGlobal , особенно если скорость-ваша забота. Но вам придется использовать один из вышеупомянутых методов для совместного использования адреса выделенной памяти между приложения.