Общая переменная между приложениями в одном и том же AppPool?


Я использую Asp.net FW 4.6.

У меня есть два приложения в одном пуле приложений, которые должны читать (постоянно) предопределенное значение, которое является объектом для изменения.

Статические переменные не могут использоваться в разных приложениях beucase (даже в одном пуле приложений) - не будут совместно использоваться.

DB / File / Server-это известные параметры.

Но:

Вопрос:

Есть ли какой-либо код, который я могу написать, который может хранить в mem значение, которое будет доступно через несколько приложений, которые находятся в одном пуле приложений ?

Что-то вроде:

MyAppPool  

    App1   -> func("royi") = 1
    App2   -> var a= func2("royi"); //1
1 2

1 ответ:

Все способы межпроцессной связи, такие как сопоставленные файлы памяти и именованные каналы, также могут использоваться для обмена данными между приложениями в пределах одного AppPool, см., например, совместное использование памяти между двумя приложениями.

Поскольку все приложения в одном и том же пуле приложений находятся в одном и том же процессе и разделены только границами домена приложений, у вас есть некоторые дополнительные опции:

  • использование MarshalByRefObject для доступа к экземпляру объекта через Границы домена приложения. Есть уже доступные оболочки, использующие MarshalByRefObject для реализации кросс-домен синглтон, например Стивен Клири ' s CrossDomainSingleton или Это один .
  • используйте указатели инебезопасный Код для прямого доступа к памяти, выделенной маршалом .AllocHGlobal , особенно если скорость-ваша забота. Но вам придется использовать один из вышеупомянутых методов для совместного использования адреса выделенной памяти между приложения.