it-swarm.com.de

Wie kann ich meinen WCF-Dienst auf meiner Website hosten?

Ich bin neu bei WCF. Ich habe einen Beispiel-WCF-Dienst entwickelt. Mein Dienst verwendet die Bindung basicHttp.

Ich hosten meinen Dienst in lokalem IIS 7.5 mit WAS und es funktioniert einwandfrei. Jetzt möchte ich meinen Service auf meiner Website hosten.

Ich suche bei Google, aber dort werden die meisten von ihnen in localhost in IIS gehostet. Bitte sagen Sie mir, wie ich das machen soll. Es ist besser, ein Tutorial oder eine Schritt-für-Schritt-Anleitung zu lesen.

20
Md.Hasanuzzaman

Sie haben grundsätzlich zwei Möglichkeiten, glaube ich:

Option 1 - "bin" deploy (bevorzugte Option)

  1. kompilieren Sie Ihren WCF-Dienst in einer DLL (Klassenbibliothek) 
  2. erstellen Sie eine Website in IIS
  3. kopieren Sie die WCF-DLLs in den .\bin-Ordner der Website
  4. erstellen Sie eine *.svc-Datei auf dieser Website
  5. fügen Sie im Websiteordner einen entsprechenden web.config hinzu, um Ihre Endpunkte und die Servicekonfiguration usw. zu definieren.

Ihr WCF-Dienst ist jetzt unter der Basisadresse der Website erreichbar, plus der Name der *.svc-Datei, z.

http://myserver/someweb/Myservice.svc

Ihr *.svc würde ungefähr so ​​aussehen:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="WCF_Simple_Service.HelloIndigoService"  %>

Die Service=-Attribute geben die Klasse an, die den Dienst implementiert - vollständig qualifiziert mit seinem Namespace.

Option 2 - zeige Sachen in App_Code

  1. erstellen Sie eine Website in IIS
  2. legen Sie alle Ihre WCF-bezogenen *.cs-Dateien direkt in den .\App_Code-Ordner ab
  3. erstellen Sie eine *.svc-Datei auf dieser Website
  4. fügen Sie im Websiteordner einen entsprechenden web.config hinzu, um Ihre Endpunkte und die Servicekonfiguration usw. zu definieren.

Ihr WCF-Dienst ist jetzt unter der Basisadresse der Website erreichbar, plus der Name der *.svc-Datei, z.

http://myserver/someweb/Myservice.svc

Ihr *.svc würde ungefähr so ​​aussehen:

<%@ ServiceHost Language="C#" Debug="true" 
    Service="Service" 
    CodeBehind="~/App_Code/Service.cs" %>

Ein einfaches Beispiel web.config könnte in etwa wie folgt aussehen:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="WithDebug">
                <serviceMetadata httpGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  <services>
    <service name="SimpleWCF.HelloIndigoService" behaviorConfiguration="WithDebug">
      <endpoint
          address=""
          binding="basicHttpBinding"
          contract="SimpleWCF.IHelloIndigoService" />
      <endpoint
          address="mex"
          binding="mexHttpBinding"
          contract="IMetadataExchange" />
    </service>
  </services>
</system.serviceModel>

Sie definieren im Wesentlichen Ihren <service>-Tag - und noch einmal: Der name= kennzeichnet die Klasse, die den Dienst implementiert - vollständig qualifiziert mit seinem Namespace. Es muss mindestens einen Endpunkt enthalten - ein "mex" -Endpunkt ist optional - aber besonders nützlich für die Entwicklung und das Testen. Es ermöglicht dem Client, den Dienst zu "entdecken" und seine Dienstbeschreibung abzurufen, damit er mit ihm kommunizieren kann.

Nachdem Ihr Dienst in IIS bereitgestellt wurde, können Sie ihn in Aktion mit einem Tool wie dem WCF-Testclient , der kostenlos mit WCF geliefert wird, oder SoapUI , einem allgemeinen Zweck SOAP, sehen. Testprogramm (mit einer kostenlosen Edition, die Sie verwenden können).

36
marc_s

alter Thread, wenn jemand es findet ... aber anstelle von * .svc können Sie auch in Ihrer global.asax erstellen:

static Global()
{
    RouteTable.Routes.Add(new ServiceRoute("ExternalServices/SOAP/test", new     ninjectServiceHostFactory(), typeof(testService)));
}
3
Roelant

Wenn Sie Ihrer * .svc-Datei Factory-Attribut hinzufügen (siehe unten), müssen Sie neben Marcs Antwort ANYTHING in der Datei web.config, die sich in Ihrem Hauptprojekt befindet, nicht ändern. Lass es mich noch einmal wiederholen. Kein massives Durcheinander in der Datei web.config, lassen Sie es so wie es ist. Es ist auf die Tatsache zurückzuführen, dass das Factory-Attribut in der SVC-Datei berücksichtigt wird, wenn dies der Fall ist.

<%@ ServiceHost Language="C#" Debug="true" Service="WCF_Simple_Service.HelloIndigoService" Factory="System.ServiceModel.Activation.WebServiceHostFactory"  %>

Aber ich muss sagen, dass, wenn Sie Ihren Dienst anrufen, der Endpunkt nicht gefunden wird. Wenn Sie jedoch Ihre Methoden in Ihrem Dienst aufrufen, funktionieren sie alle. getestet in ruhigem wcf.

0
smoothumut