EndpointNotFoundException sur appel de fonctionnement de l'exécution Reposant service WCF

J'ai un étrange problème avec une de mes services WCF. Je suis assez sûr que la plupart des gens qui ont expérimenté avec des services WCF ont eu un EndpointNotFoundException jeté lors d'un point de terminaison n'avait pas été correctement défini dans l'une de leurs fichiers de configuration. À partir de la EndpointNotFoundException de la classe page sur MSDN:

L'exception est levée lors d'un point de terminaison distant n'a pas pu être trouvé ou atteint.

Plus loin, il poursuit:

Le point de terminaison ne peut pas être trouvé ou accessible car le point de terminaison distant est en bas, le point de terminaison distant est inaccessible, ou parce que la distance le réseau est inaccessible.

Cela ne pas réfléchir à ma situation. Il semble donc que la réception d'un EndpointNotFoundException lorsque l'on travaille avec WCF est pas inhabituel, mais ce Exception est pas levée lorsque première la tentative d'accès au service... au lieu de cela, il est jeté uniquement lorsque vous essayez d'appeler l'une des activités du 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
    ...
}

Fait intéressant, le Exception message contient également le nom de l'opération dans le fichier chemin d'accès:

Il n'y a pas de point de terminaison de l'écoute à http://domain/Folder/ServiceName.svc/OperationName que peut accepter le message. Cela est souvent causé par une mauvaise adresse ou du SAVON d'action. Voir InnerException, le cas échéant, pour plus de détails.

L'intérieur Exception a le message suivant:

Le serveur distant a retourné une erreur: (404) Pas Trouvé.

C'est particulièrement déroutant pour moi comme je l'ai peut parcourir avec succès à l'URL du service et de voir la valeur par défaut Vous avez créé un service page:

EndpointNotFoundException sur appel de fonctionnement de l'exécution Reposant service WCF

Aussi, si je parcourir le chemin dans le Exception message, je vois un Endpoint pas trouvé message sur la page:

EndpointNotFoundException sur appel de fonctionnement de l'exécution Reposant service WCF

Cependant, si je navigue à toute opération de page d'un de mes autres, le travail des services WCF, je reçois un standard 400 Bad Request d'erreur à partir du navigateur, même si l'opération fonctionne très bien. Donc, il me semble que si cet original EndpointNotFoundException pourrait être un hareng rouge... je suis vraiment pas sûr de bien, comme je n'ai pas passé beaucoup de temps à travailler avec WCF.

Je vais vous montrer mon web.config (côté serveur) ici au cas où quelqu'un a besoin de le voir:

<?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>

C'est le client App.config (gardez à l'esprit que cela fait référence à deux services WCF):

<?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>

Donc si l'un des grands esprits qui fréquente de Débordement de Pile pourrait jeter quelque lumière sur ce problème pour moi, j'en serais très heureux.


Mise à JOUR >>>

En réponse à la première quelques commentaires, je soupçonne que le problème pourrait être causé par une Exception être levée à partir du serveur de code, donc j'ai simplifié le code d'opération de façon spectaculaire... maintenant il fait cela, mais j'obtiens toujours la même erreur:

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

Aussi, je ne définir le traçage, mais il n'a travaillé que sur le côté client, donc il m'a seulement dit ce que je savais déjà. Je vais regarder le lien que vous avez fourni @BigDaddy, dans le cas où il montre comment mettre en place le suivi sur le côté serveur.

En réponse à Tewr, j'ai généré le service client à l'aide de svcutil.exe, mais j'ai aussi essayé d'ajouter une référence de service et laisser Visual Studio crée la référence pour moi... les deux méthodes ont abouti à la même erreur. Aussi, j'ai fait la mise à jour des références de service toute la journée, comme je l'ai été de faire des changements. Le includeExceptionDetailInFaults="true" paramètre n'a fait aucune différence, mais je vais essayer d'ajouter une opération fictive pour le service et essayez de l'afficher dans le navigateur.


Mise à JOUR 2 >>>

Ok, j'ai donc ajouté une simple méthode de lecture pour le service et mis à jour les références de toutes les rondes comme @Tewr suggéré. Cela a fait de moi plus confus... la méthode:

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

La mise en œuvre renvoie simplement un string et je vois que la valeur quand je accéder au service dans un navigateur web:
EndpointNotFoundException sur appel de fonctionnement de l'exécution Reposant service WCF

Cependant, je encore obtenir la même erreur de code, même lors de l'appel de cette même nouvelle opération... ça veut dire quoi?


Mise à JOUR 3 >>>

Après avoir pris l'avis des commentaires, j'ai mis en place un Service de suivi dans le service de nouveau... je n'ai toujours pas d'obtenir un travail sur le serveur, mais sur le client, il n'a sortie un fichier de trace. Dans ce fichier, je vois un InvalidOperationException avec le message suivant:

Enveloppe Version " EnvelopeNone ( http://schemas.microsoft.com/ws/2005/05/envelope/none ) ne prend pas en charge l'ajout d'en-Têtes de Message.

Je suis juste à la recherche de cette maintenant, donc si vous savez ce que cette erreur, s'il vous plaît laissez-moi savoir.

  • Si vous ne l'avez pas déjà fait, configurez le suivi pour voir ce qui se passe réellement. Suivez ceci: stackoverflow.com/questions/14217700/...
  • Votre hareng rouge théorie est valide...j'ai eu la même exception avant, mais la réalité était une exception non gérée du côté service. Le consommateur a donné et a jeté l'exception générale. Débogage de l'autre extrémité.
  • On dirait que vous utilisez un générés serviceclient. Avez-vous modifié l'interface de service récemment, et peut-être oublié de mettre à jour la référence de service? Aussi, je vois de votre aide webHttp de liaison, cela vous permet de vérifier vos mappages en utilisant simplement votre navigateur. Créer un mannequin fonction de votre service [WebGet(UriTemplate = "Ping/")] bool Ping() { return true; } et tentez d'y accéder à partir d'un navigateur.. Dernier conseil, includeExceptionDetailInFaults="true" peut vous aider.
  • Mise à JOUR 1: Activation du traçage devrait vous aider. Il m'a aidé. Et il peut être appliqué sur Côté Serveur en tant que bien. Essayez de changer ces: <trace autoflush="false" /> et initializeData= "D:\Log\Traces.svclog"> Ajouter le chemin d'accès complet à "initializeData".
  • Que votre mannequin fonctionne, l'erreur est moins probable d'être sur le serveur. Votre application cliente.config semble ok pour moi, un coup d'œil. Dans ce cas, je serais le feu jusqu'à Fiddler et de comparer les en-têtes ou de l'url simple, navigateur téléphonique avec l'un de vos .net client. Que votre intérieur exception est une erreur 404 lors de l'utilisation de l' .net client, votre .net client n'a probablement quelque chose de funky avec le fonctionnement de l'url.
  • Essayez de redémarrer tout le Net.Les services TCP... qui s'est avéré pour résoudre mon problème

InformationsquelleAutor Sheridan | 2014-03-10