Bidirektionale Kommunikation zwischen AppDomains innerhalb von IIS-Anforderungen
Ich arbeite an einer ASP.NET-App und möchte die Möglichkeit hinzufügen, während einiger Anfragen Kundenskripte aufzurufen. Da wir diesem Skript nicht vertrauen, erzeugen wir eine untergeordnete AppDomain in unserer IIS-Anforderung, die über eingeschränkte Berechtigungen verfügt, und laden sowohl die Kundenassembly als auch eine Script Runner-Assembly. Das Kundenskript kann beispielsweise die Beschreibung eines Geschäftsobjekts ändern oder einen Statuscode in einen Fehler ändern, wenn bestimmte Kriterien erfüllt sind. Da die Änderungen so unterschiedlich sind, kann ich sie nicht in einem einzelnen Objekt zusammenfassen, das von einem Methodenaufruf zurückgegeben wird. Während das Skript ausgeführt wird, muss es Werte in Objekten innerhalb der Anforderung ändern, die dieses untergeordnete Element gestartet hat.
DiesPos empfiehlt die Verwendung von NetNamedPipeBinding, aber ich bin zunehmend besorgt, dass es nicht für Code geeignet ist, der in IIS ausgeführt wird, wo mehrere Anforderungen gleichzeitig ausgeführt werden können. Würde ich für jede IIS-Anforderung einen neuen Host einrichten? Richten Sie einen statischen Host für den gesamten Prozess ein und stellen Sie dann mithilfe von Endpunkten sicher, dass das richtige Kind mit der richtigen Anforderung kommuniziert. Ist das die richtige Technologie?
Wenn dies nicht die richtige Technologie ist, welche? DiesPos zeigt Ihnen, wie Sie das Handle der übergeordneten AppDomain abrufen können, aber viele davon scheinen mscoree.dll zu verwenden, und im Allgemeinen hatte ich den Eindruck, dass COM und IIS nicht besonders gut zusammenpassen.Dieser Beitra befasst sich mit dem Löschen Ihrer ursprünglichen AppDomain und dem Erstellen einer neuen. Vielleicht ist das in IIS nicht nötig?
Gibt es eine Möglichkeit für eine untergeordnete AppDomain, Methoden innerhalb des Request-Objekts, aus dem sie hervorgegangen ist, effizient auszuführen?