WCF über SSL - 404 Fehler
Okay, ich muss etwas fehlen ganz einfach hier, weil ich ve wurde googeln für Tage, und Blick auf Dutzende von Antworten gibt, und hier SO, und ich kann einfach NICHT damit es funktioniert, egal was ich versucht habe. Der service funktioniert völlig in Ordnung, wenn man über plain HTTP.
Hier ist unser setup... wir haben eine Domäne, http://www.mydomain.com . Wir haben ein SSL-Zertifikat installiert, dass die domain von thawte, nur wie würden wir die Absicherung einer e-commerce-Website. Das alles funktioniert einwandfrei, und ich kann gehen Sie zu https://www.mydomain.com und es funktioniert direkt.
Ich bin mit VS2008, .NET 3.5-Website auf Windows Server 2003 R2.
Nun, ich habe eine Silverlight-enabled WCF service auf meiner Website, die ich möchte, um die Kommunikation mit SSL. Wenn ich navigieren Sie zu https://www.mydomain.com/myservice.svc es zeigt mir die WSDL-deskriptiven "Sie haben eine service - " Seite, wie erwartet, die shows zu erstellen, die Ihre Kunden mit
svcutil.exe https://...
EDIT: erkannte ich die url angezeigt, für die svcutil in der wsdl-Datei war tatsächlich zeigt auf die physische box-name des web-Servers, nicht die richtige domain. Also ging ich durch die Schritte gezeigt, in dieses blog-posting zum aktualisieren der SecureBinding der website im IIS mit der adsutil-Skript. Nun die wsdl-Datei zeigt die richtige SSL-Adresse, aber ich bekomme immer noch den gleichen Fehler.
Nun, ich ging und versuchte meine Haken Silverlight-app bis zu es, und es funktioniert nicht, die eine Ausnahme im Ergebnis aus der asynchrone Aufrufe, die Meldung "Der Remoteserver hat einen Fehler zurückgegeben: NotFound. Eine Reihe von blogs, die ich gelesen habe darüber gesprochen, Verengung es bis auf Silverlight Probleme durch die Schaffung einer test-Windows-Anwendung, und versuchen, diese zu referenzieren. Gut, ich wusste, dass und auch in eine normale windows-Anwendung versucht, Zugriff auf den Dienst über SSL bekomme ich auch eine exception, die besagt:
System.ServiceModel.EndpointNotFoundException:
There was no endpoint listening at https://www.mydomain.com/mysubdir/myservice.svc that could accept the message.
This is often caused by an incorrect address or SOAP action.
See InnerException, if present, for more details. --->
System.Net.WebException: The remote server returned an error: (404) Not Found.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
Dies trotz der Tatsache, dass ich explizit Hinzugefügt werden, die service-Verweis auf die Windows-app mit dem HTTPS-Schema und es richtig bekommt alle Methoden und zeigt Ihnen Intellisense im editor.
Beachten Sie, dass dies ist ein service, der KEINE explizite log-in auf dem Benutzer-Teil. Ich werde das senden benutzerdefinierter Header in meinem SOAP-Umschläge, um zu überprüfen, dass die Anfragen kommen von unserer app, und ich will einfach nur halten Sie Raubtiere von sniffing die Linie und die Auswahl der custom-Header.
Nun der code, wo muss ich nur ein paar dumme kleine Einstellung falsch, weil von allen, die ich gelesen habe, sollte dies eine ziemlich einfache übung.
Erste, mein service code-behind-Klasse ist geschmückt mit den folgenden Attributen:
<ServiceBehavior(AddressFilterMode:=AddressFilterMode.Any)>
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Des ServiceModel-Bereich meiner web.config auf dem server sieht so aus:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="basicHttpBinding">
<security mode="Transport">
<transport clientCredentialType ="None"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="standingsBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
<add prefix="http://www.mydomain.com:80"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<services>
<service behaviorConfiguration="standingsBehavior" name="lijslwebdata">
<endpoint address="" binding="basicHttpBinding" contract="lijslwebdata"/>
<!--<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>-->
</service>
</services>
</system.serviceModel>
Und der ServiceModel-Sektion der app.config in meiner Windows-Anwendung sieht wie folgt aus:
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_lijslwebdata" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00"
sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288"
maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://www.mydomain.com/mysubdir/myservice.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_lijslwebdata"
contract="xdata.lijslwebdata" name="BasicHttpBinding_lijslwebdata" />
</client>
</system.serviceModel>
InformationsquelleAutor der Frage eidylon | 2009-10-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich das gleiche Problem auf meinem Ende. Ihr Beitrag hat mir geholfen herauszufinden, was das Problem war. hier ist mein service-Modell Abschnitt. Ich entdeckte, dass der Schlüssel waren die httpsGetEnabled dann die Einstellung bindingconfiguration ich hoffe, das hilft.
InformationsquelleAutor der Antwort
War ich den Umgang mit dieser vor kurzem, und möchte hinzufügen, ein zwicken. Wenn Sie den obigen Anweisungen Folgen, werden Sie in der Lage, um die service-arbeiten mit HTTPS, aber nicht gleichzeitig arbeiten sowohl für HTTP als auch HTTPS. Um das zu tun, müssen Sie zwei endpoint-Konfigurations-Knoten, einen für jedes Protokoll wie folgt:
(aus meiner Codebasis anpassen Einstellung behaviorconfiguration und-Bindung angebracht)
InformationsquelleAutor der Antwort John Ketchpaw
Verbrachte ich nur ein paar Stunden auf, und es stellte sich heraus, mein problem war der service name
hatte exakt die ähnlichen Eintrag in meiner *.svc-Datei.
Ich bin mir nicht sicher, ob es war in Bezug auf meine Verwendung des Autofac.
Es war in Ordnung arbeiten unter plain-HTTP.
Fehlgeschlagen unter HTTPS aber.
Naja ich denke schon, dass ich nicht stören will jetzt nichts von Tests im detail, damit ich die Wut, die den WCF-Config Götter und meine config bricht wieder. YMMV.
InformationsquelleAutor der Antwort fiat
In meinem Fall nicht von diesen Antworten geholfen.
Stattdessen musste ich hinzufügen eines doppelten
<verbindliche>
- Abschnitt, der hat keinename
- Attribut festgelegt.Hier ist der dump von der entsprechenden Sektion auf meiner service-web -.config-Datei:
Ich hoffe, dass dies hilfreich sein könnte für jemanden, irgendwann.
InformationsquelleAutor der Antwort Uwe Keim
Ich hatte das gleiche Problem und verbrachten einen Tag damit, um dieses Problem zu beheben. Endlich unter Konfiguration arbeitete mich für den HTTPS-Zugriff.
InformationsquelleAutor der Antwort Murali
Alles scheint ganz gültig, keine eklatanten Fehler gemacht...
Nur eine Beobachtung/Frage: wo ist dein *.svc-Datei befindet??
In der Fehlermeldung, die ich sehe:
Ist dein *.svc-Datei wirklich in den top-level-virtual-Verzeichnis Ihrer Website?
In der Regel, die *.svc-Datei in einem virtuellen Verzeichnis auf dem IIS und damit die Adresse wäre so etwas wie:
Natürlich bereitstellen, können Sie eine ASP.NET app und einen WCF-service *.svc-Datei in das Stammverzeichnis der IIS - aber es ist nicht sehr üblich, in meiner Erfahrung.
Nur ein thingie, um zu überprüfen.....
Marc
InformationsquelleAutor der Antwort marc_s
Okay, ich habe anscheinend das Problem behoben wurde,, und ich habe absolut keine Ahnung warum/wie.
Hier ist was ich getan habe.
Warum dieses fest, ich habe absolut KEINE Ahnung.
FWIW für alle, hier ist meine neue web.config ServiceModel Abschnitt mit dem zweiten service...
InformationsquelleAutor der Antwort eidylon
Es hat nicht funktioniert für Sie vor, weil Sie Ihren Namen "basicHttpBinding" Konfiguration "basicHttpBinding", aber nicht Referenz, die Konfiguration in Ihren tag mit dem bindingConfiguration="basicHttpBinding"
In Ihren Veränderungen, die nicht funktioniert haben durch das hinzufügen eines weiteren service-Konfiguration hast du dann auch die Referenz des binding-Konfiguration enthält: die Knoten-daher verursacht es Arbeit.
InformationsquelleAutor der Antwort Huzaifa Tapal
Nur eine andere Sache zu prüfen, wenn Sie auf den gleichen Fehler 404 als OP. Ich fummelte mit vielen Dingen, aber schließlich die Lösung kam lediglich das hinzufügen der Namensraum my web service.config.
Also plain old ServiceFoo und IServiceFoo NICHT funktioniert:
Aber das hinzufügen der Namensraum (ProjectBar) HAT funktioniert:
InformationsquelleAutor der Antwort Matthew Lowe
Einige der Antworten führte mich in neu konfigurieren, meine web.config enthalten zwei Endpunkten. Ich landete mit diesem folgenden Web.config.
InformationsquelleAutor der Antwort Harald Lund