2010-11-08 8 views
3

Notre application WCF service Windows accède à un service WCF, qui est hébergé par un service Windows sur un seul ordinateur. L'application client et le service seront toujours sur le même ordinateur.Impossible déboguer

J'ai créé un service Windows qui héberge un service WCF. Pour tester mon code de service Windows, j'ai créé une application de console contenant le même app.config et le même code que mon service Windows. Je démarre l'application console dans un thread de débogage et lance mon client dans un autre thread de débogage. Tout fonctionne parfaitement et je peux facilement utiliser le débogueur.

Maintenant que le bât blesse ...

Alors, j'ai créé un programme d'installation et installé mon service Windows. Après avec succès à partir, j'ajouté avec succès le service de référence à mon client à l'aide http://localhost/VssService Visual Studio 2010. J'ai attaché avec succès au service via « Attacher au processus ». J'ai lancé mon client dans un thread de débogage, mais lorsque j'essaie de passer à une méthode distante, j'obtiens «Impossible d'entrer automatiquement dans le serveur.» Le débogueur n'a pas pu s'arrêter dans le processus serveur. Cela se produit à la fois pour [NetNamedPipeBinding_IVssService] et [BasicHttpBinding_IVssService]. J'ai lutté avec cela pendant des heures et je n'ai plus d'idées, alors j'espère que vous pourrez m'aider. J'ai inclus les fichiers app.config pour mon application Windows Service et Client. J'espère qu'ils vont aider.

Je vous remercie de votre temps de prise de lire cette question et nous espérons que vous pouvez aider à être à résoudre ce problème ...

Mike

============== ======= SERVICE app.Config =============================

<services> 
     <service behaviorConfiguration="VssServiceBehavior" name="ClientSaver.VssService.VssService"> 
      <endpoint address="net.pipe://localhost/VssService/Pipe/" binding="netNamedPipeBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 
      <endpoint address="http://localhost/VssService/" binding="basicHttpBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" /> 
      <endpoint address="http://localhost/VssService/MEX/" binding="mexHttpBinding" 
       bindingConfiguration="" contract="IMetadataExchange" /> 
      <host> 
       <baseAddresses> 
        <add baseAddress="http://localhost/VssService/" /> 
       </baseAddresses> 
      </host> 
     </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VssServiceBehavior"> 
     <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> 
     <serviceDebug includeExceptionDetailInFaults="False" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 

=================== ====== CLIENT App.Config =============================

  <endpoint address="http://localhost/VssService/" binding="basicHttpBinding" 
       bindingConfiguration="" contract="ClientSaver.VssService.IVssService" />        
     </service> 
    </services> 

    <behaviors> 
    <serviceBehaviors> 
     <behavior name="VssServiceBehavior"> 
     <serviceMetadata httpGetEnabled="true" policyVersion="Policy15" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
    </serviceBehaviors> 
    </behaviors>  
</system.serviceModel> 

+0

Regardé cela? http://social.msdn.microsoft.com/Forums/en-IE/asmxandxml/thread/20b41329-1aed-4892-925e-ce0d5cef70fe – Kangkan

+0

Pour marquer comme une réponse, cliquez sur l'icône qui est comme Tik (marque de Nike) dans la main gauche d'une des réponses. –

+0

Juste une note: vous pouvez passer à travers la plupart du développement initial WCF avec le suivi et la journalisation des événements. Veuillez vérifier le lien suivant: http://msdn.microsoft.com/en-us/library/ms733025.aspx. – casals

Répondre

0

Vous ne pouvez pas à travers les frontières exécutables. Vous aurez besoin de définir le point d'arrêt dans votre code de serveur (c'est le projet). Puis, à partir du projet du serveur, attachez-le au processus de service Windows en cours (attention ici ... vous devez avoir le dernier projet serveur en cours d'exécution en tant que service Windows). Ensuite, lorsque vous entrez dans votre application Windows Forms, elle est interceptée par le point d'arrêt du serveur.

+1

Vous pouvez faire un pas à travers les frontières exécutables dans WCF lorsque vous l'exécutez avec l'hôte VS par défaut –

+0

Mais peut-être qu'il essaie de passer du service WCF d'un projet (projet Windows) à un autre projet (projet WCF) et ils ne sont peut-être pas en la même solution ... et ce serait le problème d'entrer dans ... –

+0

Il est également possible de déboguer le service hébergé dans IIS et d'autres façons, Dans tous il n'y a pas de problème pour faire un service dans une même solution que d'autres projets , la solution ne signifie rien de spécifique. –

0

Vous devez utiliser Internet Explorer comme navigateur par défaut pour déboguer votre service ...

+0

Salut tout le monde, Merci beaucoup pour toutes vos idées. La suggestion d'Ivan de ne pas s'introduire dans notre méthode dans le service Microsoft, mais en y mettant un point d'arrêt lors de l'exécution de notre application dans un autre thread de débogage a fonctionné. :) – ABOH

0

Jetez un oeil sur les outils de débogage pour Windows. Il y a quelques outils ici qui sont utiles pour le débogage des services Windows.

3

Ok. Une façon que j'utilise lorsque le débogage VS cesse de fonctionner est de placer un System.Diagnostics.Debugger.Break() dans un endroit conventient dans le code de service (disons, constructeur ou méthode). Cela provoque le lancement du débogueur JIT et me permet de me connecter au service avec le code rompu à ce point avec n'importe quelle instance VS que j'ai. Il est évident que vous le supprimez du code non de débogage.

0

Avez-vous essayé de charger manuellement les symboles de débogage? Cela m'est arrivé une fois et ça se passait parce que VS ne chargeait pas les symboles.

Questions connexes