27 votes

Impossible de déboguer le message de service WCF

J'ai une solution Visual Studio 2008 avec un service WCF, et un client.

Quand je lance mon client, et appeler une méthode de mon service, je reçois un message disant "Impossible de automatiquement debug 'à la Maison.De Service". La procédure à distance ne peut pas être débogué. Cela indique généralement que le débogage n'a pas été activé sur le serveur."

J'ai googlé autour, et ont essayé de la suivante.

<system.web>
   <compilation debug="true" />
</system.web>

a été ajouté dans l'app.config à la fois le client et le serveur.

J'ai aussi fait en sorte que le projet est compilé en mode Debug.

Quoi d'autre pourrait être à l'origine de ce message?

Edit: Ajout de plus d'info sur la base des commentaires des questions

  • C'est à l'aide de wsHttpBinding
  • J'ai mis

    <serviceDebug includeExceptionDetailInFaults="true"/>
    
  • Je suis à l'aide de

    var service = new HomeReference.HomeServiceClient();
    service.ClientCredentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
    

Malheureusement, l'erreur s'affiche la première fois que j'appelle une méthode sur mon Service. Je peux rejeter la messagebox, et l'application continue de fonctionner. Toutes les Exceptions levées sur le serveur à pas propagé vers le client, même si (je suppose qu'il devrait?)

35voto

Exist Points 996

Je me battais avec cette même erreur exacte pendant plus d'une heure et bas et voici, j'ai redémarré VS2008 et il s'est corrigé comme par magie. Essayez-le car cela pourrait vous faire gagner du temps.

13voto

Samuel Jack Points 14556

Dans mon cas, le problème s'est avéré être une incompatibilité entre les paramètres de sécurité sur le client et le serveur. J'ai été en utilisant une liaison personnalisée comme ceci:

<customBinding>
    <binding name="AuthorisedBinaryHttpsBinding" receiveTimeout="00:03:00" sendTimeout="00:03:00">
      <!-- this next element caused the problem: -->
      <security authenticationMode="UserNameOverTransport">
      </security>
      <binaryMessageEncoding>
        <readerQuotas maxDepth="100" maxStringContentLength="1000000"
          maxArrayLength="655360000" />
      </binaryMessageEncoding>
      <httpsTransport />
    </binding>
  </customBinding>

Quand j'ai enlevé l'élément de sécurité je l'ai souligné ci-dessus, le problème avec le "Impossible automatiquement debug" message a disparu.

Pour résoudre le problème j'ai d'abord mis sur WCF traçage. Cela m'a montré que la WCF a été lancer une MessageSecurityException:

Processeur de sécurité n'a pas pu trouver un en-tête de sécurité dans le message. Cette peut-être parce que le message est un non garantis faute ou parce qu'il n'y est une la liaison de l'inadéquation entre les parties communicantes. Cela peut se produire si le service est configuré pour la sécurité et le client n'est pas à l'aide de de sécurité.

Qui me fait de regarder les paramètres de Liaison sur le côté client. Il s'est avéré que je n'avais pas ajouté de sécurité requises élément de ma liaison personnalisée de là. Depuis que j'ai fait à l'aide de code, j'avais besoin de ce qui suit (notez le 3e ligne):

  var binding = new CustomBinding(
      binaryEncoding,
      SecurityBindingElement.CreateUserNameOverTransportBindingElement(),
      new HttpsTransportBindingElement { MaxReceivedMessageSize = MaxMessageSize, });

Pourquoi Visual Studio a été de montrer que l'erreur, je n'ai aucune idée qui me semble être un bug.

7voto

Jorge Garcia Points 64

Automatiquement de s'attacher à un service de a les limitations suivantes:

  • Le service doit faire partie de la solution Visual Studio vous sont débogage.

  • Le service doit être hébergé. Il peut faire partie d'un Projet de Site Web (Système de Fichier et HTTP), le Projet d'Application Web (Système de Fichier et HTTP), ou au Service WCF projet de Bibliothèque. Service WCF projets de la Bibliothèque peuvent être soit des Services que les Bibliothèques ou les Flux de travail du Service des Bibliothèques.

  • Le service doit être invoqué à partir d'un WCF client.

  • Le débogage doit être activé avec le code suivant dans l'application.config ou Web.fichier de configuration:

    <system.web>
      <compilation debug="true" />
    </system.web>
    

Voir les Limitations sur WCF Débogage

En outre, si les deux projets (client et de service) sont dans la même solution, mais sera exécuté dans les différents processus (par exemple, si vous utilisez votre local Serveur IIS pour le développement et sont en cours d'exécution de votre application web sur un autre pool d'applications que le service qu'il consomme), vous devrez peut-être activer "Plusieurs projets de démarrage" de la solution sur les Propriétés de la Solution -> Projet de Démarrage), de sorte que le débogueur permet d'attacher à la fois.

Pour éviter le service à la fenêtre du navigateur pour afficher chaque fois que vous le débogage, vous pouvez définir le "Start Action" (sur le service des propriétés du projet) à "Ne pas ouvrir une page. Attendre pour demander de l'application externe."

C'est à partir de l'expérience personnelle et peut aider les autres.

6voto

Dave Points 177

L'autre raison, vous pourriez voir cette erreur (et je crois que c'est le cas pour moi) c'est que si vous êtes en 64 bits de Windows. Apparemment Visual Studio n'est pas tout x64 débogueur.

Vous pouvez contourner ce problème en modifiant la Plate-forme Cible pour la demande de consommation:

Propriétés du projet -> Build -> Changement de Plateforme "Cible" à "x86".

Malheureusement, cela ne fonctionne pas pour moi car je suis en train de lancer dans le Développement Windows Azure AppFabric qui semble en avoir besoin tout de fonctionner en 64 bits mode!

1voto

sriram Points 46

J'ai aussi eu le même problème. J'ai changé à la fois dans les fichiers de configuration client et service comme

Le débogage de la compilation est défini sur true.

Cela a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X