2009-01-16 12 views
19

Versuch, meine WCF-Dienst zu bekommen unter IIS ausgeführt 6.WCF läuft nicht unter IIS 6.0

Ich habe die .svc und aspnet_isapi.dll Mapping erstellt nach: http://msdn.microsoft.com/en-us/library/ms752241.aspx

Bei der Betrachtung Server1.svc Seite, erhalte ich ein 404.

Ich habe die Website mit einer einfachen ASPX-Seite getestet, um sicherzustellen, dass die URL funktioniert, aber auch die .svc-Erweiterung ist nicht.

Ich habe .NET 3.5 SP1 installiert, meine web.config verweist auf 3.5 Assemblys, und ich erhalte keinen Fehler beim Anzeigen einer ASPX-Seite, so dass es diese Assembly in Ordnung ist, vermutlich.

Was könnte falsch sein?

+1

Ist das auf einem Remote-Server orlocalhost? Wenn Sie remote sind, haben Sie überprüft, ob alles lokal funktioniert? –

Antwort

6

Es gibt zwei Dinge, die ich denken kann:

Die SVC-Erweiterung ist nicht richtig eingestellt (am wenigsten wahrscheinlich nach Ihrer Beschreibung). Sie können dies überprüfen post für weitere Details.

Oder Ihre Website hat mehrere Host-Header. Um dieses Problem zu beheben, müssen Sie einen einzelnen Hostheader haben oder eine Factory verwenden. Hier ein Beispiel:

namespace MyNamespace 
{ 
    public class MultipleHostServiceFactory : ServiceHostFactory 
    { 
     protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) 
     { 
      List<Uri> addresses = new List<Uri>(); 
      addresses.Add(baseAddresses[0]); 
      return base.CreateServiceHost(serviceType, addresses.ToArray()); 
     } 
    } 
} 

Als nächstes müssen Sie die Fabrik im Markup Ihrer SVC-Datei setzen:

<%@ ServiceHost Language="C#" 
       Debug="false" 
       Factory="MyNamespace.MultipleHostServiceFactory" 
       Service="MyNamespace.MyService" 
       CodeBehind="MyService.svc.cs" %> 
+0

Es gibt keine Host-Header von dem, was ich sehen kann, nur mit der IP – Blankman

+1

Sie haben das OP-Problem möglicherweise nicht gelöst, aber Sie haben meins! – RSolberg

20

Mehr als wahrscheinlich die SVC-Erweiterung ist nicht unter IIS registriert als behandelt werden von ASP.NET (WCF).

diese 2 Schritte Versuchen (ersetzen Framework mit Framework64, wenn es gebraucht wird):

Gehe zu:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\ 

und dann laufen:

aspnet_regiis -i 

Gehe zu: C: \ Windows \ Microsoft.NET \ Framework \ v3.0 \ Windows Kommunikation Foundation

und dann laufen:

ServiceModelReg.exe -i 
+0

Das hat für mich funktioniert! Danke –

+0

Dies war ein Lebensretter! Ich musste nur "aspnet_regiis" ausführen und es wurde behoben. –

+1

Wenn Sie "-i" ausführen, werden alle vorherigen .net-Installationen "unterbrochen"? unsere gesamte Website läuft .net 1 ... Ich muss arbeiten, um zu funktionieren. Soll ich mit -i Flags laufen? Ich möchte keine vorhandenen Sachen ändern. – BabelFish

17

Unter Internet Information Service (IIS) Manager, öffnen Sie den Knoten Web Service Extension genannt. Stellen Sie sicher, dass ASP.NET v2.0.5.0727 auf Zulassen festgelegt ist. Ich habe stundenlang nach verschiedenen Einstellungen gesucht und festgestellt, dass es auf Verboten gesetzt war. Klicken Sie einfach auf die Schaltfläche Zulassen, um ASP.NET zu aktivieren.

+0

Danke, du hast gerade meine Bereitstellung repariert! – stuartd

+0

@Stuart Dunkeld, Sie sind herzlich willkommen. Ich bin froh, dass es geholfen hat. –

+0

Das kann auch mit ASP.NET v4 passieren ... –

3

Ich hatte das gleiche Problem. Es endete damit, dass ich eine 64-Bit-Version von Windows 2003 Server ausführte und meine Assemblys für "Any CPU" konfiguriert hatte. Sobald ich die Assemblies auf x86 umgestellt und auf den Server hochgeladen habe, hat alles funktioniert.

Ich weiß nicht, warum niemand irgendwo anders in den 30 Threads, über die ich gelesen habe, erwähnt hat, aber mein Freund empfahl es mir, und es funktionierte wie ein Zauber.

Einfach nur rauswerfen, falls jemand das gleiche Problem hat.

0

Ich hatte das gleiche Problem und löste es, indem ich ISAPI-Erweiterungen erlaubte. Öffnen Sie unter dem Internetinformationsdienst-Manager den Knoten, der als Webdiensterweiterung bezeichnet wird. Stellen Sie sicher, dass "Alle unbekannten ISAPI-Erweiterungen" auf Zulassen festgelegt ist.

0

Ich kämpfte damit stundenlang, bis ich dieses Beispiel schließlich verwendet und es zuerst gehen bearbeitetem http://www.codeproject.com/Articles/105273/Create-RESTful-WCF-Service-API-Step-By-Step-Guide

Ich weiß nur, Link Antworten nicht gut sind und andere haben diesen CP-Link zu solve this type of problem here at Stackoverflow so hier verwendet werden, die grundlegenden Schritte, wenn der Artikel jemals untergeht:

SCHRITT 1

Zunächst einmal starten Visual Studio 2010. Klicken Sie auf Datei> Neu> Projekt. Erstellen Sie eine neue "WCF-Dienstanwendung".

SCHRITT 2

Nachdem Sie das Projekt erstellen, können Sie von Standard-WCF-Dienst und Interface-Datei bereits erstellt (Service1.cs & IService.cs) sehen in Lösung. Löschen Sie diese beiden Dateien, und wir werden unsere eigene Schnittstelle und WCF-Servicedatei erstellen.

SCHRITT 3

Jetzt der rechten Maustaste auf Lösung und erstellen Sie eine neue WCF-Service-Datei. Ich habe der Servicedatei den Namen "RestServiceImpl.svc" gegeben.

SCHRITT 4

Wie ich am Anfang des Artikels erklärt, dass wir eine API schreiben, die Daten in XML und JSON-Format zurückkehren können, ist hier die Schnittstelle dafür. Fügen Sie in IRestServiceImpl den folgenden Code hinzu

In dem obigen Code können Sie zwei verschiedene Methoden von IRestService sehen, die XMLData und JSONData sind. XMLData gibt das Ergebnis in XML zurück, während JSONData in JSON zurückgegeben wird.

[ServiceContract] 
public interface IRestServiceImpl 
{ 
    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Xml, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "xml/{id}")] 
    string XMLData(string id); 

    [OperationContract] 
    [WebInvoke(Method = "GET", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, 
     UriTemplate = "json/{id}")] 
    string JSONData(string id); 
} 

STEP 5

Öffnen Sie die Datei RestServiceImpl.svc.cs und schreiben Sie den folgenden Code dort:

public class RestServiceImpl : IRestServiceImpl 
{ 
    public string XMLData(string id) 
    { 
     return "You requested product " + id; 
    } 

    public string JSONData(string id) 
    { 
     return "You requested product " + id; 
    } 
} 

STEP 6

Web.Config

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0" /> 
    </system.web> 
    <system.serviceModel> 
    <services> 
     <service name="RestService.RestServiceImpl" behaviorConfiguration="ServiceBehaviour"> 
     <!-- Service Endpoints --> 
     <!-- Unless fully qualified, address is relative to base address supplied above --> 
     <endpoint address ="" binding="webHttpBinding" contract="RestService.IRestServiceImpl" behaviorConfiguration="web"> 
      <!-- 
       Upon deployment, the following identity element should be removed or replaced to reflect the 
       identity under which the deployed service runs. If removed, WCF will infer an appropriate identity 
       automatically. 
      --> 
     </endpoint> 
     </service> 
    </services> 

    <behaviors> 
     <serviceBehaviors> 
     <behavior name="ServiceBehaviour"> 
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="true"/> 
      <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="false"/> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp/> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 
    <system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

SCHRITT 7

In IIS:

enter image description here

Verwandte Themen