2012-03-29 12 views
17

Ich erstellte meinen ersten WCF-Dienst und testete es auf meinem Computer, und es funktioniert.Wie erzeuge ich die .svc Datei?

Die vorhandenen Dateien sind eine Schnittstelle, eine Implementierung dieser Schnittstelle und eine app.config-Datei.

Nun, da es Zeit ist, dies auf einem echten Server mit IIS zu hosten, wurde mir mitgeteilt, dass IIS beim Empfang eingehender Anrufe nach einer .svc-Datei sucht.

Hier ist, was ich gefunden habe:

WCF-Dienste in IIS gehostet werden als spezielle Inhaltsdateien (SVC-Dateien) in der IIS-Anwendung dargestellt. Dieses Modell ähnelt der Darstellung von ASMX-Seiten in einer IIS-Anwendung als .asmx-Dateien. Eine .svc-Datei enthält eine WCF-spezifische Verarbeitungsrichtlinie (@ServiceHost), die es der WCF-Hosting-Infrastruktur ermöglicht, gehostete Dienste als Reaktion auf eingehende Nachrichten zu aktivieren.

Kann mir bitte jemand sagen, wie ich diese Datei erstellen kann, damit ich sie hosten kann?

Danke!

+2

http://msdn.microsoft.com/en-us/library/ms733766.aspx – Reniuz

+0

So service.svc ist im Grunde eine andere Art und Weise Endpunkte zu erklären? Was nützt die app.config dann? – TheGateKeeper

+1

@TheGateKeeper: Es definiert fast einen Endpunkt, aber nicht wirklich. Sie müssen sich daran erinnern, dass eine IIS-Einstellung anforderungsgesteuert ist, so dass die .svc-Datei dem IIS lediglich mitteilt, dass dies der Speicherort ist, an dem der Dienst ausgeführt werden soll. Es würde sich anders verhalten, wenn es sich um einen TCP-Service oder eine Windows-Service-gehostete Lösung handelte. Denken Sie daran, dass Sie Webseitenanfragen mit Ihrem Service teilen. - BTW, Follow-up zu dem Kommentar von Reniuz: http://msdn.microsoft.com/en-us/library/aa751792.aspx –

Antwort

18

Die Sache, die Sie beachten sollten, ist, dass IIS in erster Linie ein Webserver und WCF-Host zweitens ist.

Die Aufgabe des Webservers besteht darin, Daten basierend auf einer eingehenden Anfrage zu rendern. Die meisten dieser Daten sind Inhalt (der Anfragepfad korreliert direkt mit einer Datei auf dem Server), aber im Falle eines WCF-Dienstes muss IIS wissen, wohin er von hier geht (also die SVC-Datei und die "Direktiven" zu IIS drehen) deinen Dienst).

All SVC-Datei tut sagen, dass bei /x/y/z.svc habe ich einen WCF-Dienst, die aus einem vielen mehr als nur serverseitige Seiten und Content-Dateien geeignet ist. Also bitte spiniere es, stelle es zur Verfügung und erlaube, dass meine eingehenden Verbindungen verarbeitet werden.

Wenn dies ein WCF-Dienst auf seine eigen dediziert Port gehostet ist, wäre dies eine andere Geschichte sein, weil es länger ist nicht mit zusätzlichen Anforderungen für /Styles/base.css zusätzlich zu /MyService/GetSomeObject/ streit.

+0

Danke Mann sehr gut erklärt. – TheGateKeeper

+0

Hallo, können Sie mir mit einem letzten Bit helfen? Unter http://msdn.microsoft.com/en-us/library/ms733766.aspx werden Sie in Schritt 8 aufgefordert, die Schnittstelle in der Klasse service.cs zu erstellen. Ich habe meine Schnittstelle als Teil einer .dll, muss ich diesen Teil noch tun? – TheGateKeeper

+0

Verweisen Sie es mit dem Namespace 'My.Custom.Assembly.IService' –

10

IIS Hosted .svc Datei besteht aus der @ServiceHost Direktive und Attribut, Service.

<% @ServiceHost Service="MyNamespace.MyServiceImplementationTypeName" %> 

Der Wert des Dienst Attributs ist der CLR-Typ Name Ihrer Service-Implementierung. Die Verwendung dieser Anweisung entspricht im Wesentlichen der Erstellung eines Service-Hosts, der den folgenden Code in Ihrem selbst hosting-Konsolenprogramm verwendet.

new ServiceHost(typeof(MyNamespace.MyServiceImplementationTypeName)); 

Und wenn Sie sich selbst gehostete Anwendung WCF Konfiguration wie 'Endpunkt' verwenden, 'verbindlich', usw. in der app.config, können Sie setzen auch, dass in web.config. Der von IIS gehostete Dienst verwendet dieselben Konfigurationselemente und dieselbe Syntax wie WCF-Dienste, die außerhalb von IIS gehostet werden. (Außer etwas wie Sie nicht Basis/Endpunkt-Adresse in IIS-gehosteten Dienst steuern können.) Und legen Sie Ihre vorkompilierte .dll-Datei in Anwendung \ bin-Verzeichnis Ihrer IIS-Site.

Und die Adresse des von IIS gehosteten Dienstes ist die Adresse der .svc-Datei. (http://localhost/Application1/MyService.svc).

Bitte überprüfen Sie die folgenden msdn - Deploying an IIS-Hosted WCF Service.

http://msdn.microsoft.com/en-us/library/aa751792.aspx

+0

Danke Kumpel, nett. – TheGateKeeper

Verwandte Themen