Die beste Methode zum Erstellen einer Hot Pluggable WCF-Servicebibliothek

8

Ich habe an einer WCF-Service-Bibliothek gearbeitet, in der hoffentlich die ganze Geschäftslogik enden wird. Das Problem, auf das ich stoße, ist, dass ich manchmal schnelle Korrekturen an einem Dienst vornehmen muss und um diese Fixes anzuwenden, muss ich den Windows-Dienst stoppen, die Dienst-DLL ersetzen und dann den Windows-Dienst neu starten. Dies wird zusätzliche Probleme bereiten, wenn wir mehr und mehr von unserer Logik auf diese Ebene migrieren und den gesamten Dienst herunterfahren müssen, um Änderungen vorzunehmen.

Ich möchte eine leere Shell eines Windows-Dienstes erstellen und die Dienste dynamisch laden und entladen. Was ist der beste Weg zum Laden und Entladen von .Net DLLs bei Bedarf? Oder ist es besser, sich für diese Art von Service auf IIS zu verlassen?

    
thaBadDawg 05.01.2009, 00:50
quelle

4 Antworten

8

Wenn Sie WCF verwenden, ist ein Name, mit dem Sie vertraut sein müssen, Juval Lowy. Er ist der Gründer von IDesign und einer der anerkanntesten Experten in Bezug auf WCF. Sein Buch WCF-Dienste programmieren wird dringend empfohlen.

Die IDesign Website bietet eine ganze Reihe von kostenlosen Downloads für WCF. Sie müssen lediglich Ihre E-Mail-Adresse angeben und die Lizenzvereinbarung von IDesign befolgen.

Von besonderem Interesse für Sie sind möglicherweise der App Domain Host, die In-Proc Factory und die In-Proc Hosting Downloads hier .

    
Matt Davis 05.01.2009, 02:58
quelle
2

Sie können wahrscheinlich Reflektion verwenden, um bestimmte Logik dynamisch zu laden, die Sie benötigen, aber die Leistung, die auf Ihren Diensten erreicht wird, wird gewaltig sein und das tun, was Sie wollen, das Sie beschrieben haben.

Wenn du noch keine Reflexion benutzt hast, hier ist ein Beispiel, das ich von einem Projekt genommen habe, das ich habe. Es zeigt, wie eine Assembly geladen und eine Methode mit einigen Parametern aufgerufen wird.

%Vor%

Offensichtlich kenne ich Ihre Umgebung nicht, aber im Allgemeinen würde ich sagen, dass es viel besser ist, den Dienst für ein paar Minuten herunterzufahren, um die Software zu aktualisieren, als Ihr gesamtes Paradigma zu ändern, um dynamisch zu sein.

Wenn Sie ständig Hotfixes haben, die einen Dienstabbruch erfordern, sollten Sie keinen zentralen Dienst haben. Du würdest es die ganze Zeit runter nehmen. Es ist besser, separate Dienste zu haben, die sich mit verschiedenen logischen Funktionen befassen, so dass Ihre gesamte Anwendung nicht zum Absturz gebracht wird (Single Point of Failure).

    
Sailing Judo 05.01.2009 01:29
quelle
1

Sobald eine Assembly in eine AppDomain geladen wurde, bleibt sie erhalten im Speicher, bis diese AppDomain entladen und zerstört wird. Um eine "hot pluggable" -Umgebung zu simulieren, müssen Sie daher AppDomains (aus dem Hauptprozess 'AppDomain'), die die eigentlichen Business-Assemblies hosten und die Anwendungslogik ausführen, einrichten und herunterfahren.

Es ist unnötig zu erwähnen, dass Sie eine Leistungseinbuße erwarten sollten, wenn Sie AppDomains pro WCF-Serviceaufruf ständig erstellen / löschen. Es ist beabsichtigt, eine Betriebsgrenze zu erstellen, die von Ihrer Hauptanwendungsdomäne isoliert ist, um sinnvolle Arbeit zu leisten, die für eine gute Dauer dauert. Der Vorteil von AppDomains ist, dass Sie Speicherauslastung sparen können , wenn Sie eine ganze Reihe von Geschäftslogik-Assemblys haben möchte im Laufe der Zeit entladen.

Das beste Beispiel für diese Art von dynamischem Setup und Zerlegen ist ASP.NET. Die ASP.NET-Laufzeit erstellt für jede Webanwendung eine Anwendungsdomäne. Wenn sich auf der Website etwas ändert, z. B. web.config, wird die AppDomain entladen und eine neue AppDomain-Einrichtung für die neue Version der Webanwendung - Anwendung recycle - eingerichtet.

    
icelava 05.01.2009 02:23
quelle
0

Verwenden Sie MEF zum Verwalten von Abhängigkeiten zusammen mit MAF (System.AddIn) zum Laden / Entladen von Addins.

    
Krzysztof Kozmic 05.01.2009 21:33
quelle

Tags und Links