Question

Je suis en cours d'exécution d'un service simple sur mon serveur avec WCF; le service est hébergé dans WebDev.WebServer.EXE (local).

Quand j'appelle le service local, je reçois l'exception suivante:

  

Exception non gérée: System.ServiceModel.Security.SecurityNegotiationException: canal sécurisé ne peut pas être ouvert car la négociation de sécurité avec le point de terminaison distant a échoué. Cela peut être dû à EndpointIdentity absent ou incorrectement spécifié dans le EndpointAddress utilisé pour créer le canal.   S'il vous plaît vérifier la EndpointIdentity spécifiée ou sous-entendus par le EndpointAddress identifie correctement le critère d'évaluation à distance. ---> System.ServiceModel.FaultException: Le message d'action « http : //schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue » ne peut pas être   traité au niveau du récepteur, en raison d'une incompatibilité de ContractFilter au EndpointDispatcher. Cela peut être à cause de   soit une différence de contrat (Actions entre dépareillées émetteur et le récepteur) ou un décalage de liaison / sécurité entre l'émetteur et le récepteur. Vérifiez que l'émetteur et le récepteur ont le même marché et les mêmes contraignants (y compris les exigences de sécurité, par exemple un message, Transport, Aucun).

Voici mes deux fichiers app.config du client et le serveur. J'ai fait le app.config du client avec l'svcutil-Tool donc il doit être juste:

Client

<client>
    <endpoint address="http://localhost:1634/UsuarioContexto.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IUsuarioContexto"

        contract="CarWin.ServiceContracts.Interfaces.IUsuarioContexto" name="LOCAL_WSHttpBinding_IUsuarioContexto">

        <identity><dns value="localhost" /></identity>

    </endpoint>

</client>

<binding name="WSHttpBinding_IUsuarioContexto" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">

    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />

    <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />

    <security mode="Message">

        <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />

        <message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true" />

    </security>

</binding>

Serveur

<services>
    <service behaviorConfiguration="UsuarioContextoBehavior" name="UserContext.Host.UsuarioContexto">

        <endpoint address="" binding="wsHttpBinding" bindingNamespace="http://CarWin" bindingConfiguration="wsHttpBinding_IUsuarioContexto"

                  contract="CarWin.ServiceContracts.Interfaces.IUsuarioContexto">

            <identity>

                <dns value="localhost" />

            </identity>

        </endpoint>

        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />

    </service>

</services>


<bindings>

    <wsHttpBinding>

        <binding name="wsHttpBinding_IUsuarioContexto" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">

            <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" />

            <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />

            <security mode="None">

                <transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />

                <message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />

            </security>

        </binding>

    </wsHttpBinding>

</bindings>

<behaviors>

    <serviceBehaviors>

        <behavior name="UsuarioContextoBehavior">

            <serviceMetadata httpGetEnabled="true" />

            <serviceDebug includeExceptionDetailInFaults="true" />

        </behavior>

    </serviceBehaviors>

</behaviors>
Était-ce utile?

La solution

Le problème était dans le serveur, je mets en mode = « Message » et fonctionne bien. merci.

<security mode="None">  

<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />  

<message clientCredentialType="Windows" negotiateServiceCredential="true" establishSecurityContext="true" />  

</security> 

Autres conseils

WCF est très puissant, mais peut être un cauchemar de configuration. Voici quelques pistes possibles:

  • Activer les journaux de suivi WCF, exécutez à nouveau votre scénario, puis vérifiez les journaux avec SvcTraceViewer.exe
  • Déterminez dans quelle mesure la messagerie devient ...
    • i.e.. le client ne forme la demande et l'envoyer au serveur qui la rejette (par exemple dans les couches inférieures WCF avant votre propre code de service est touché);
    • ou ne la demande s'arrête dans ses pistes avant que le client .. même jamais envoyer la demande
  • http://schemas.xmlsoap.org/ws/2005 / 02 / confiance / RST / Problème est un message lié token-WS-trust, donc il y aura quelque chose qui se passe avec l'authentification
    • de l'erreur qui implique qu'il ya une incompatibilité de configuration, mais en utilisant SvcUtil devrait les avoir alignés comme vous avez dit
  • Le client de liaison a le serveur à « http: // localhost: 1634 / UsuarioContexto.svc "
    • Je ne vois pas que le port spécifié dans la configuration de service ... est le service d'écoute sur ce port?
    • si vous ouvrez un navigateur et visez à cette URL, vous obtenez une page de service par défaut?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top