2013-04-26 3 views
15

Ich habe eine WCF-Dienstseite, auf der nur WebGets/WebInvokes über SSL ausgeführt werden - das funktioniert auf meinem lokalen Computer (selbstsigniertes Zertifikat) einwandfrei. Bei der Produktion kann ich jedoch service.svc erreichen (und es gibt mir die Nachricht darüber, wie man konsumiert), aber service.svc/AnyRequest gibt eine 404 zurück. Beide Umgebungen werden in IIS 7.5 gehostet.WCF-Dienst, der 404 auf Methodenanforderungen zurückgibt

Ich habe die Ablaufverfolgung aktiviert und der Dienst nimmt noch nicht einmal die Methodenanforderungen (z. B. service.svc/SomeRequest), aber es verarbeitet service.svc ganz gut. Es hört auch bei https://computername.domain.net/path/service.svc - ist das normal? Sollte es normalerweise auf https://publicfacing.com/path/service.svc zeigen?

Beachten Sie auch, dass der Produktionsserver mehrere Websites in IIS hostet.

Unten ist der Abschnitt system.serviceModel meiner web.config. Das SSLBehave wurde von here vorgeschlagen.

<system.serviceModel> 
    <bindings> 
     <webHttpBinding> 
     <binding name="TransportSecurity"> 
      <security mode="Transport"> 
      <transport clientCredentialType="None"></transport> 
      </security> 
     </binding> 
     </webHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="SSLBehave"> 
      <useRequestHeadersForMetadataAddress> 
      <defaultPorts> 
       <add scheme="https" port="443"/> 
      </defaultPorts> 
      </useRequestHeadersForMetadataAddress> 
     </behavior> 
     </serviceBehaviors> 
     <endpointBehaviors> 
     <behavior name="UserManagement.ajaxAspNetAjaxBehavior"> 
      <webHttp defaultOutgoingResponseFormat="Json" defaultBodyStyle="Wrapped" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
     multipleSiteBindingsEnabled="true" /> 
    <services> 
     <service name="UserManagement.ajax" behaviorConfiguration="SSLBehave"> 
     <endpoint address="" behaviorConfiguration="UserManagement.ajaxAspNetAjaxBehavior" 
      binding="webHttpBinding" bindingConfiguration="TransportSecurity" contract="UserManagement.ajax" /> 
     </service> 
    </services> 
    </system.serviceModel> 
+0

funktioniert der Service, wenn er lokal aufgerufen wird? – theusguy

+0

@theusguy Negativ, immer noch 404. – Snuffleupagus

+0

Wenn Ihr Problem immer noch besteht, kann meine Antwort Ihnen vielleicht helfen –

Antwort

9

Ich würde mit der Überprüfung einer Reihe von Dingen beginnen;

  • Berechtigungen für das gehostete Verzeichnis?
  • . Net-Version ist korrekt?
  • Haben Sie das Zertifikat der Site hinzugefügt?
  • Versuchen Sie ein Bild in der gleichen Weg setzen, können Sie zu, dass (ausschließen die ungeraden gelegentlichen Pfadzuordnungen)

Viel Glück navigieren!

+0

Obwohl dies mein Problem nicht gelöst hat, sind die meisten davon die beste Wahl für alle, die nach einer Lösung suchen. Genieße das Kopfgeld. :) – Snuffleupagus

+2

ElatedOwl, wenn Sie das Problem gelöst haben, bitte posten Sie Ihre Antwort. – MGOwen

+1

Für alle, die dies zu finden, hatte ich ein ähnliches Problem, hier ist meine Frage, komplett mit der ** Lösung **: http://StackOverflow.com/Questions/26398049 – MGOwen

5

Ich hatte das gleiche Problem. Von dem, was ich lese, ist WCF nicht NT authentifizierte Berechtigung (oder HTTPContext kompatibel) standardmäßig.

Ich hatte diese auf meine Config-Datei im Abschnitt für den WCF-Dienst web.config hinzufügen:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 

Was du getan hast, und diese:

Und auf der I tatsächliche Serviceklasse definiation musste hinzufügen:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 
public class DataService : IDataDeliveryServiceContract 

Das behob mein Problem.

+0

Hey, ich habe Tag in der Datei WCF.config hinzugefügt und Attribut in der service wie du es aber immer gesagt hast, wenn ich Fehler bekomme und Cross Browsing erhalte. – user3217843

5

Sie können die Transport-Level-Sicherheit mithilfe von WsHttp-Bindungen implementieren. Siehe this article; in Ihre Bindungen versuchen, diese abwart statt:

<wsHttpBinding> 
<binding name="TransportSecurity"> 
<security mode="Transport"> 
<transport clientCredentialType="None"/> 
</security> 
</binding> 
</wsHttpBinding> 

Der Artikel erwähnt, sollten Sie die Bindungen mit den Endpunkten binden.

4

Wie Sie bereits erwähnt haben, können Sie mit der .svc-Erweiterung service.svc auf Ihren Dienst zugreifen, aber nicht im REST-Format service.svc/AnyRequest, das Problem muss routing integration sein.

diese web.config

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </modules> 
    <handlers> 
    <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd"/> 
    </handlers> 
</system.webServer> 

Im IIS 6 Die Ursache für diesen Fehler zu Ihrem müssen hinzufügen Check that file exists Einstellung von svc extention sein, stellen Sie sicher, „Überprüfen Sie, ob Datei existiert deaktiviert ist“. Weitere Informationen finden Sie unter IIS Hosted Service Fails.

5

Vielleicht in Ihrem RouteConfig.cs Datei diese Zeile hinzufügen:

routes.IgnoreRoute("{resource}.svc/{*pathInfo}"); 

Solange Ihre SVC-Datei in dem Stammverzeichnis der Anwendung ist.

+0

Diese Antwort ist sehr hilfreich, wenn Sie versuchen, den 'WCF Service' direkt von der MVC App aus aufzurufen. Ich bekam '404 - Not Found Error' für jquery Post Anfrage. Jetzt gelöst, das hat mir geholfen.:) – RajeshKdev

1

Das erste was ich mache, wenn ich einen 404 mit einem neu entwickelten WCF-Web-Service treffe, ist die Überprüfung des Handler-Mappings, um diese Art von Aufruf zu interpretieren, weil es oft die Ursache des Problems ist. Es gibt mehrere Möglichkeiten, das Problem zu umgehen, von denen viele eine manuelle Ausführung des Konsolenbefehls ServiceModelReg.exe erfordern: Dies sind zweifelsohne gültige Prozeduren, funktionieren aber möglicherweise auch nicht - oder erzeugen zusätzliche Probleme, wenn Ihr Entwicklungscomputer eine besonders komplexe Konfiguration aufweist. Das unten beschriebene Lösungsverfahren ist etwas länger abzuziehen, hat aber den Vorteil, das Problem sicherer und sicherer zu lösen.

  • öffnen Sie die Server-Manager Schnittstelle für Maschinenmanagement, in der Regel in sowohl die Taskleiste und das Startmenü.
  • Gehen Sie zum Dashboard und wählen Sie Hinzufügen Rolle oder Feature, um den Assistenten zu öffnen.
  • Wählen Sie Rollenbasierten oder Feature-basierten Installationstyp und den Server, auf dem Sie arbeiten möchten, dh Ihr lokaler/lokaler Server.
  • Zum Eigenschaften Abschnitt: Einmal dort, erweitern Sie den .NET Framework 3.5 Funktionen Knoten und/oder die .NET Framework 3.5 Funktionen Knoten, je nachdem, was Sie installiert haben: Wenn Sie beide haben, Sie sollte den folgenden Schritt zweimal (für jeden von ihnen) ausführen.
  • Erweitern Sie den Abschnitt WCF-Dienste (falls verfügbar), und wählen Sie dann HTTP-Aktivierung (siehe Abbildung unten).
  • Fahren Sie fort, bis Sie den Assistenten abgeschlossen haben, und klicken Sie dann auf Installieren Sie.

enter image description here

Sobald die Installation abgeschlossen ist, sollten Sie nie wieder ohne entstehen in den 404-Fehlern Ihren WCF-Dienst ausführen können.

Für weitere Informationen zu diesem speziellen Problem und wie Sie es beheben können, können Sie auch read the following post.

Verwandte Themen