EndpointNotFoundException Sie auf anrufen, um den Betrieb der Laufenden RESTful WCF service

Ich habe ein wirklich komisches problem mit einem meiner WCF-Dienste. Ich bin mir ziemlich sicher, dass die meisten Menschen, die haben experimentierte mit WCF-Dienste hatten eine EndpointNotFoundException ausgelöst, wenn ein Endpunkt wurde nicht richtig gesetzt in einer der Konfigurations-Dateien. Aus der EndpointNotFoundException Klasse - Seite auf MSDN:

Die Ausnahme, die ausgelöst wird, wenn ein remote-Endpunkt konnte nicht gefunden werden oder erreicht.

Weiter, es geht weiter:

Den Endpunkt kann nicht gefunden werden oder erreichbar, da der remote-Endpunkt, ist der remote-Endpunkt ist nicht erreichbar oder weil der remote-Netzwerk ist nicht erreichbar.

Bedeutet dies nicht spiegeln meine situation. Es scheint also So, dass das erhalten einer EndpointNotFoundException bei der Arbeit mit WCF ist nicht ungewöhnlich, aber diese Exception ist nicht geworfen, wenn ersten versucht auf den Dienst zuzugreifen... statt, es wird ausgelöst, nur wenn Sie versuchen zu nennen eine der Operationen, die der service:

using (ExportConfirmationServiceClient client = new ExportConfirmationServiceClient(
    "WebHttpBinding_IExportConfirmationService")) //<-- Exception is NOT thrown here
{
    ...
    component releaseConfirmation = DeserializeTestXmlFile(filePath);
    client.AddExportConfirmation("5051275066302", releaseConfirmation);
    //Exception is thrown on call to service operation on line above
    ...
}

Interessant, die Exception Nachricht enthält auch die Namen der operation in den genannten Dateipfad:

Es wurde kein Endpunkt hören auf http://domain/Folder/ServiceName.svc/OperationName könnte, dass die Nachricht akzeptiert. Dies wird oft verursacht durch eine fehlerhafte Adresse oder SOAP-Aktion. Sehen InnerException, falls vorhanden, für weitere details.

Den inneren Exception hat die folgende Meldung angezeigt:

Dem remote server hat einen Fehler zurückgegeben: (404) Nicht Gefunden.

Dies ist besonders verwirrend für mich, da ich kann erfolgreich durchsuchen, um die Dienst-URL und sehen Sie die Standard - Sie haben eine service - Seite:

EndpointNotFoundException Sie auf anrufen, um den Betrieb der Laufenden RESTful WCF service

Auch, wenn ich navigieren Sie zu dem Pfad in der Exception Nachricht, ich sehe ein Endpunkt nicht gefunden Nachricht auf der Seite:

EndpointNotFoundException Sie auf anrufen, um den Betrieb der Laufenden RESTful WCF service

Jedoch wenn ich navigieren Sie zu jeder operation-Seite von einer meiner anderen arbeiten, WCF-services, bekomme ich eine standard - 400 Bad Request Fehler vom browser, obwohl der Betrieb gut funktioniert. So scheint es mir, als ob diese ursprüngliche EndpointNotFoundException könnte ein red herring... ich bin wirklich nicht sicher, obwohl, wie ich habe nicht viel Zeit damit verbracht, die Arbeit mit WCF.

Werde ich Ihnen zeigen, meine web.config (server-Seite) hier nur für den Fall jemand braucht, um es zu sehen:

<?xml version="1.0"?>
<configuration>    
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
    </system.web>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="Midas.WebConfirmations.ExportConfirmationServiceBehaviour">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="webHttp">
                    <webHttp />
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
        <services>
            <service name="Midas.WebConfirmations.ExportConfirmationService" behaviorConfiguration="Midas.WebConfirmations.ExportConfirmationServiceBehaviour">
                <endpoint address="" binding="webHttpBinding" contract="Midas.WebConfirmations.IExportConfirmationService" behaviorConfiguration="webHttp" />
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
            </service>
        </services>
    </system.serviceModel>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
    </system.webServer>
</configuration>

Dies ist die client - App.config (beachten Sie, dass diese Referenzen zwei WCF-Dienste):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IDataService" 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="None">
                        <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
            <webHttpBinding>
                <binding name="WebHttpBinding_IExportConfirmationService" allowCookies="true" maxReceivedMessageSize="20000000" maxBufferSize="20000000" maxBufferPoolSize="20000000">
                    <readerQuotas maxDepth="32" maxArrayLength="200000000" maxStringContentLength="200000000"/>
                </binding>
            </webHttpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="Midas.WebConfirmations.ExportConfirmationServiceBehaviour">
                    <serviceMetadata httpGetEnabled="true" />
                    <serviceDebug includeExceptionDetailInFaults="false" />
                </behavior>
            </serviceBehaviors>
            <endpointBehaviors>
                <behavior name="webEndpointBehavior">
                    <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Xml" helpEnabled="true"/>
                </behavior>
            </endpointBehaviors>
        </behaviors>
        <client>
            <endpoint address="http://devbucket.ministryofsound.mos.local/MidasWebServices/DataService.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IDataService" contract="Midas.WebServiceClients.IDataService" name="BasicHttpBinding_IDataService" />
            <endpoint address="http://devbucket.ministryofsound.mos.local/MidasWebConfirmations/ExportConfirmationService.svc" binding="webHttpBinding" bindingConfiguration="WebHttpBinding_IExportConfirmationService" behaviorConfiguration="webEndpointBehavior" contract="IExportConfirmationService" name="WebHttpBinding_IExportConfirmationService" />
        </client>
    </system.serviceModel>
</configuration>

Also, wenn einer von den großen Köpfen, die Häufig Stapelüberlauf könnte etwas Licht auf dieses problem für mich, würde ich es sehr zu schätzen.


UPDATE >>>

In der Antwort auf die ersten Kommentare, habe ich den Verdacht, dass das problem könnte verursacht werden durch eine Exception ausgelöst wird, von der server-Seite code, so dass ich vereinfacht die Bedienung code drastisch... jetzt alle es tut, ist dies, aber ich bekomme immer noch den gleichen Fehler:

public void AddExportConfirmation(string upc, component ingestionFeedback)
{
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
}

Auch, ich hat einrichten der Nachverfolgung, aber es funktioniert nur auf der client-Seite, so es nur mir sagte, was ich schon wusste. Ich werde haben Sie einen Blick auf den link, den Sie @BigDaddy, wenn es sich zeigt, wie Sie die Ablaufverfolgung auf der server-Seite.

In der Antwort zu Tewr, generiert ich den service-client mit svcutil.exe, aber ich habe auch versucht, das hinzufügen eines dienstverweises-und Vermietung von Visual Studio erstellen, die Referenz für mich... mit beiden Methoden führte zu dem gleichen Fehler. Auch ich habe seit der Aktualisierung des service Referenzen ganzen Tag habe ich schon verpasst. Die includeExceptionDetailInFaults="true" Einstellung nicht keinen Unterschied machen, aber ich werde versuchen, das hinzufügen einer dummy-Betrieb für den service und versuchen, um es in den browser.


UPDATE 2 >>>

Ok, also ich habe eine einfache getter-Methode der service-und aktualisiert die Referenzen alle rund wie @Tewr vorgeschlagen. Diese gerade hat mich mehr verwirrt... die Methode:

[XmlSerializerFormat()]
[OperationContract]
[WebGet()]
string GetString();

Die Umsetzung nur gibt eine string und ich sehen, dass Wert, wenn ich Zugriff auf den service in einem web-browser:
EndpointNotFoundException Sie auf anrufen, um den Betrieb der Laufenden RESTful WCF service

Aber ich noch die gleichen Fehler aus dem code, auch wenn der Aufruf dieser gleichen neuen Betrieb... was bedeutet das?


UPDATE 3 >>>

Nachdem Sie die Ratschläge aus den Kommentaren, habe ich ein Service-Spur auf der service wieder... ich konnte immer noch nicht bekommen den man auf dem server arbeiten, sondern auf dem client, es hat der Ausgabe einer trace-Datei. In dieser Datei sehe ich eine InvalidOperationException mit der folgenden Meldung:

Umschlag-Version 'EnvelopeNone (http://schemas.microsoft.com/ws/2005/05/envelope/none)' unterstützt das hinzufügen von Kopfzeilen.

Ich bin nur der recherche zu diesem jetzt, also, wenn Sie wissen, was diese Fehler sind, bitte lassen Sie es mich wissen.

Wenn Sie es nicht bereits getan haben, richten Sie die Ablaufverfolgung, um zu sehen, was wirklich Los ist. Folgen Sie dieser: stackoverflow.com/questions/14217700/...
Ihre red herring-Theorie gültig ist...habe ich bekommen, die gleiche Ausnahme vor, aber die Realität war eine nicht behandelte Ausnahme auf der service-Seite. Gerade der Verbraucher gab auf und warf die Decke Ausnahme. Debuggen Sie das andere Ende.
Sieht aus wie Sie mit einer generierten serviceclient. Haben Sie die service-Schnittstelle vor kurzem, und vielleicht vergessen ein update der service Referenz? Außerdem sehe ich Ihr mit webHttp verbindlich, dies hilft Ihnen, überprüfen Sie Ihre Zuordnungen nur über den browser. Erstellen Sie eine dummy-Funktion auf Ihrem service [WebGet(UriTemplate = "Ping/")] bool Ping() { return true; } und versuchen, es auf einem browser.. Letzter Tipp, includeExceptionDetailInFaults="true" kann Ihnen dabei helfen.
UPDATE 1: Aktivieren der Ablaufverfolgung Ihnen helfen sollen. Es hat mir geholfen. Und es kann angewendet werden auf der Server-Seite als auch. Versuchen Sie, diese: <trace autoflush="false" /> und initializeData= "D:\Log\Traces.svclog"> Add vollständigen Pfad zu "initializeData".
Als Ihre dummy-Funktion funktioniert, der Fehler ist weniger wahrscheinlich zu sein auf dem server. Ihre client-app.config sieht ok für mich, auf einen Blick. In Fällen wie diesen, würde ich Sie feuern Fiddler und vergleichen Sie die Header - /url-von der einfachen, arbeitenden browser aufrufen, mit dem man von Ihr .net-client. Als Ihre innere Ausnahme ist eine 404-Fehlermeldung, wenn mit den .net-client .net-client hat vermutlich etwas funky mit dem Betrieb-url.

InformationsquelleAutor Sheridan | 2014-03-10

Schreibe einen Kommentar