5 Stimmen

Hosting eines WCF-Dienstes innerhalb eines Webprojekts

Ich versuche, einen wcf-Dienst innerhalb eines c# mvc-Webprojekts zu erstellen. Ich habe ein neues Element vom Typ "WCF Service" hinzugefügt und eine Testmethode in der bereitgestellten Schnittstelle hinzugefügt:

[ServiceContract]
public interface ITest
{
    [OperationContract]
    void DoWork();

    bool testWorking();
}

Und der angebotene Service:

public class Test : ITest
{
    public void DoWork()
    {
    }

    public bool testWorking()
    {
        return true;
    }
}

Dann bin ich zur Datei web.config übergegangen und habe dem Tag system.ServiceModel Folgendes hinzugefügt:

 <services>
      <service name="Test" behaviorConfiguration="MyServiceTypeBehaviors">
        <endpoint address="" binding="wsHttpBinding" contract="ITest">
          <identity>
            <dns value="localhost"/>
          </identity>
        </endpoint>
        <endpoint address="mex"  binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="MyServiceTypeBehaviors" >
          <serviceMetadata httpGetEnabled="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

So wie ich es verstehe, sollte ich jetzt in der Lage sein, dies in einem Browser anzuzeigen und eine Testmeldung zu erhalten, die mir mitteilt, dass es an der Zeit ist, einen Client zur Nutzung dieses Dienstes zu implementieren. Was jedoch tatsächlich passiert, ist, dass mein Browser die .svc-Datei herunterlädt!

Zwei Fragen:

1) Was zum Teufel mache ich falsch? Warum erhalte ich nicht die erwartete Meldung?

2) Gibt es eine Möglichkeit, das WCF-Testtool automatisch zu starten, damit es auf diesem Dienst läuft? Die einzigen Richtlinien, die ich finden kann, sind für den Start aus einem WCF-Projekt.

Aktualisierung: (Inhalt der svc-Datei - aus dem Kommentar entnommen)

<%@ ServiceHost Language="C#" Debug="true" 
    Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %>

1voto

ilivewithian Punkte 19100

Nach dem, was Sie beschrieben haben, sollte es Ihnen gut gehen, aber da das nicht der Fall ist:

  1. Welchen Server verwenden Sie? IIS, cassini?
  2. Was ist der Inhalt der heruntergeladenen svc-Datei? (öffnen Sie sie in Notepad)

Um das Testtool von Visual Studio aus zu starten, klicken Sie mit der rechten Maustaste auf die .svc-Datei und wählen Sie "Als Startseite festlegen" und drücken Sie dann f5. Dadurch sollte sich das Testtool öffnen und Sie können Ihren Dienst überprüfen. Das sollte Ihnen einige Anhaltspunkte für das Problem geben.

0voto

Marc Gravell Punkte 970173

Das klingt nach einem Problem mit der Webserver-Konfiguration;

  • Ist die Anwendung im IIS als Anwendung gekennzeichnet (hat sie ein Zahnrad)? - Sie sollte
  • Ist die Anwendung so konfiguriert, dass sie die richtige Version von ASP.NET verwendet (d. h. nicht 1.x)?
  • Ist .NET 3.0 oder höher auf dem Server installiert?
  • Enthält die web.config des Framework-Masters die .svc-Zuordnungen?

re die letzte, ich habe hier eine Panne gesehen, wo die Installation berührt die Konfiguration überhaupt nicht Wenn Sie also die Master-Web.config auf dem Server manuell geändert haben, müssen Sie die 3.0-Änderungen möglicherweise manuell anwenden.

zum Beispiel in <buildProviders> sollten Sie etwas haben wie (für 3.0):

<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

in <httpHandlers> sollten Sie etwas haben wie (für 3.0):

<add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

und es sollte eine Vielzahl von zusätzlichen Dingen in <compilation>/<assemblies> wie zum Beispiel:

<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
<add assembly="System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

Dies ist nur ein kurzer Überblick - es kann weitere geben, und die genauen Werte können sich je nach Umgebung ändern.

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