1

J'essaye de déboguer un problème avec une application de cadre compact de .net que j'ai fonctionné sur Windows Mobile 6. Il se produit quand j'appelle un appel de service de Web sur ma machine de développement.Comment puis-je arrêter les exceptions dans un service Web lancé par le client/l'appelant?

Je n'ai pas besoin d'aide avec l'erreur réelle, mais avec l'appel du débogueur au bon moment.

Je lance le web-service en mode débogage et suis capable de déclencher un breakpoint dans le studio visuel, donc je sais qu'il est attaché ok. Le problème que j'ai, c'est que lorsque mon service Web déclenche une exception, l'appel de service Web se termine immédiatement et le texte de l'exception apparaît sur l'écran de mon client mobile. Ce que je veux vraiment arriver, c'est que l'exception provoque l'arrêt de l'exécution de Visual Studio et me permette d'utiliser le débogueur pour plus d'investigations. Comme vous pouvez l'imaginer, ne pas pouvoir obtenir un numéro de ligne est assez frustrant car je dois parcourir le code ligne par ligne jusqu'à ce que l'exception apparaisse sur le client mobile.

J'ai lu sur le web comment vous pourriez transformer des exceptions en applications SOAP pour les transmettre à des clients distants, je pense que peut être c'est ce qui se passe mais je ne le veux pas!

Répondre

1

Il semble que Visual Studio est uniquement configuré pour gérer les exceptions 'non gérées' mais d'après ce que je peux rassembler, le code qui appelle ma méthode de service Web l'enveloppe dans un try..catch, gère l'erreur et la transmet à le client sur SOAP. Si vous allez à Debug-> Exceptions ... dans Visual Studio, il y a des cases à cocher pour forcer Visual Studio à invoquer le débogueur sur les exceptions levées traitées dans le framework .NET - Cochez la case "thrown" à côté de Common Language Runtime Exceptions et il le récupère ensuite correctement!

+0

Content de l'entendre! Je sais qu'il y a une option pour briser toutes les exceptions, même si elles sont gérées, ce qui pourrait être ce dont vous parlez. De cette façon, vous pouvez suivre le chemin d'exécution dans tous les cas. – SqlRyan

+0

Vous devez être prudent car (dans le cadre compact) Microsoft effectivement jeter (et gérer) des exceptions en interne! J'ai donc dû décocher certaines bibliothèques comme System.Data et ça a bien fonctionné! –

0

L'exception se produit-elle dans votre application (comment elle gère le résultat de l'appel de service Web) ou se produit-elle sur le service distant et l'exception est-elle renvoyée? En guise de solution de contournement temporaire, vous pouvez essayer d'inclure l'appel webservice dans un bloc Try/Catch, puis l'appeler de nouveau depuis la section Catch, avec un point d'arrêt sur l'appel. De cette façon, quand il échoue la première fois, l'exécution va interrompre le deuxième appel, de sorte que vous pouvez intervenir ou vérifier différentes valeurs tout ce que vous voulez, sans avoir à parcourir votre code pour arriver à ce point.

+0

Cela se produit très certainement dans le service Web. L'erreur réelle provient d'un appel de serveur sql qui se produit uniquement dans le service Web. Je viens de le montrer à un collègue et il est d'accord que c'est un comportement bizarre. Les wrappers d'essai supplémentaires sur le client ne seront pas vraiment utiles dans cette instance car j'ai besoin que le débogueur Visual Studio soit déclenché par l'exception lancée sur mon service Web. –

+0

Ah - Je pensais que votre application ne faisait que signaler l'exception, au lieu de la gérer correctement. Comme cela vient du serveur, c'est logique maintenant. – SqlRyan

Questions connexes