39 Stimmen

WCF: Was ist ein ServiceHost?

Da ich gerade lerne, WCF-Dienste zu nutzen, stoße ich im Internet immer wieder auf Tutorials, in denen die Verwendung eines ServiceHost bei Verwendung eines WCF-Dienstes.

Was genau ist das? ServiceHost ?


In meinem aktuellen Projekt verwende ich einen WCF-Dienst und habe einen Verweis auf ihn von meiner App und wann immer ich ihn von meiner App konsumieren möchte, instanziiere ich einfach seine ServiceClient als solche:

new MusicRepo_DBAccess_ServiceClient(new InstanceContext(instanceContext), customBinding, endpointAddress);

Und dann auf meine Webmethoden zugreifen ( OperationContract s) von dieser Instanz (natürlich öffnen Sie sie, bevor Sie die Methode konsumieren, und schließen sie danach mit Open y Close )

Mein WCF-Dienst wird in meinem IIS gehostet und ich greife einfach auf die .svc aus meiner Anwendung zu instanziieren die ServiceClient .

Warum also und wo ist ServiceHost verwendet?

33voto

Andy White Punkte 83877

Ein ServiceHost bietet Ihnen im Grunde alles, was Sie brauchen, um einen WCF-Dienst in einer Nicht-IIS- oder WAS-Umgebung zu hosten. Ein üblicher Einsatzort für einen ServiceHost ist eine Konsolenanwendung oder ein Windows-Dienst. Siehe den Beispielcode von MSDN für wie man einen ServiceHost in einer Konsolenanwendung einrichtet .

18 Stimmen

Fast richtig - sogar IIS und WAS verwenden einen ServiceHost, um Ihren WCF-Dienst zu hosten - sie erstellen ihn einfach und bauen ihn automatisch hinter Ihrem Rücken wieder ab.

4 Stimmen

Ja, ich habe nur versucht zu beschreiben, wann Sie einen ServiceHost in Ihrem eigenen Code sehen würden. Auf den IIS/WAS ServiceHost wird normalerweise nicht direkt vom Entwickler zugegriffen.

0 Stimmen

Ja, das ist richtig - der ServiceHost ist im IIS/WAS-Szenario fast unsichtbar :)

29voto

marc_s Punkte 701497

Ihre Dienstimplementierung ist nur eine .NET-Klasse - Sie brauchen eine Laufzeitumgebung für sie, damit sie irgendwie ausgeführt werden kann. Dafür ist der ServiceHost da - er lädt Ihre Dienstklasse, richtet die Endpunkte und Channel-Listener und all das Zeug ein und gibt Ihrer Dienstklasse so ein "Ökosystem", in dem sie leben und arbeiten kann.

Sie können entweder selbst eine ServiceHost-Klasse in einer Konsolenanwendung, einem Windows-Dienst oder sogar einer Winforms-Anwendung instanziieren und so Ihre WCF-Dienstklasse der Außenwelt zugänglich machen - oder Sie können diese Arbeit an IIS oder WAS delegieren. Sogar IIS oder WAS verwenden einen ServiceHost, um Ihren WCF-Dienst zu hosten - sie tun es einfach automatisch hinter den Kulissen und "bei Bedarf" - wann immer eine Anfrage für Ihren WCF-Dienst eingeht.

Marc

1 Stimmen

Würden Sie verwenden, dass in TDD-Tests, wo Sie Anrufe wie das Senden in bestimmte Header oder Daten an die http-Anfrage (WebOperationContext) zu wcf-Service-Methoden testen möchten?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X