2017-09-27 2 views
1

Ich benutze Asp.net FW 4.6.Gemeinsame Variable über Anwendungen innerhalb desselben AppPools?

Ich habe zwei Anwendungen unter dem gleichen Anwendungspool, die (vordefiniert) einen vordefinierten Wert lesen müssen, der zu ändern ist.

Statische Variablen können nicht verwendet werden, weil verschiedene Apps (sogar unter demselben App-Pool) - nicht geteilt werden.

DB/Datei/Server sind bekannte Optionen.

Aber:

Frage:

Gibt es einen Code, den ich schreiben kann, dass in mem Wert speichern kann, die zugänglich durch mehrere Anwendungen sein, die unter der gleichen App Pool ist?

Etwas wie:

MyAppPool 

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

Antwort

0

Alle Möglichkeiten der Interprozesskommunikation, wie Memory Mapped Files und Named Pipes kann auch für den Austausch von Daten über verschiedene Anwendungen innerhalb einzelner AppPool verwendet werden, siehe zum Beispiel Sharing memory between two applications.

Da alle Anwendungen in der gleichen AppPool im gleichen Prozess befindet und nur durch AppDomain Grenzen getrennt sind, haben Sie einige zusätzliche Optionen:

  • Verwenden MarshalByRefObject auf Objektinstanz Zugriff über AppDomain Grenzen. Es gibt bereits Wrapper, die MarshalByRefObject verwendet Quer AppDomain Singleton zu implementieren, zum Beispiel Stephen Cleary ‚s CrossDomainSingleton oder this one.
  • Verwenden Sie Zeiger und unsafe Code, um direkt auf Speicher von Marshal.AllocHGlobal zugeteilt zugreifen, vor allem, wenn Geschwindigkeit Ihr Anliegen ist. Aber Sie müssen eine der oben genannten Methoden verwenden, um die Speicheradresse des zugewiesenen Speichers zwischen den Anwendungen zu teilen.
Verwandte Themen