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

Schreibe einen Kommentar