[Web service][C#] Obtenir plus d'infos sur les exceptions

Bonjour les gens,

J’ai un problème assez con. Comment qu’on fait pour visualiser en détail une exception de type System.Web.Services.protocols.SoapException ?

J’essai en ce moment de déployer un plugin sur MS CRM 4.0 via un batch. Celà implique que je dois utiliser un install helper au sein de ma solution C# (solution qui contiendra les assembly de mes plugins sous VS 2005). L’install helper est fournit avec le sdk de la CRM 4.0. L’idée du batch était de pouvoir déployer/installer les plugins développés par nos soins de facon aisé et rapide.

Voici le code tel il est écrit dans l’install helper.

[code]private Guid RegisterSolution(Assembly assembly, string description,
List stepRegistrations)
{

		RegisterSolutionRequest request = new RegisterSolutionRequest();
		request.PluginAssembly = GetPluginAssembly(assembly);
		request.Steps = stepRegistrations.ToArray();
		RegisterSolutionResponse response = (RegisterSolutionResponse)_service.Execute(request);
		 
		return response.PluginAssemblyId;[/code]

L’exception se déclenche à l’appel de service.Execute. J’ai beau essayé d’afficher le message de l’exception, mais je recois que de breves informations.

Edit : l’exception que j’obtiens est la suivante :

Server unable to Process the request

Je peux concevoir que peu de gens ici (voir aucun) travaillent sur la CRM 4.0. Donc, ma question repose essentiellement sur la manière de visualiser en détail cette foutu exception :slight_smile:

PS : j’aurai pu poster ce message sur le forum de Microsoft et principalement sur celui qui cause CRM, mais je n’arrive ni à me loguer ni à m’enregistrer.

2 choses me viennent à l’esprit :

[ul]
[li]Il me semble qu’il y a un truc à spécifier dans le web.config pour que les exceptions soient sérialisées et envoyées au client[/li][li]Si c’est déjà fait, que contient la propriété InnerException de l’exception que tu recois?[/li][/ul]voilà voilà

  • Je n’ai pas de web.config dans ma solution.
  • le contenu d’InnerException est vide… :slight_smile:

Si tu veux faire simple, installe fiddler et analyse le détail de l’xml renvoyé. (En plus il te permettra de comparer l’appel “qui marche” et l’appel “qui marche pas”)

  • Soit il y a des infos dans l’xml (cad plus de détails sur l’exception), et tu dois donc te pencher sur la levée de l’exception côté client (mais je doute que ce soit ça, l’innerexception est normalement remplie avec les infos).
  • Soit il n’y a pas d’infos, et dans ce cas il te faut regarder le web.config du site web qui contient le webservice invoqué (si si, il doit y avoir un web.config sur ce site).

Si tu rames, files nous au moins l’url du webservice appellé.

Arf, j’aurai du préciser. L’erreur que j’obtiens est affiché sur la console VS 2005 lorsque j’execute le batch d’installation de mon plug in. Je peux modifier l’install helper pour tracer un peu plus dans le détail pour voir où ca bloque. Mais là où j’en suis, je n’ai plus aucune piste.

Le batch contient la commande suivante :

La dll en question est une classe librairy.

Installes fiddler :slight_smile:

Tu le lances, puis tu lances ton batch… Il t’interceptera toutes les requêtes envoyées. Normalement ta réponse se trouve là dedans.

Regarde qd même ton event log sur ton serveur CRM, voir s’ils ont éventuellement mis un handler pour enregistrer les exceptions survenues lors d’appels de webservices.

Oh pinaise, fiddler il troue le cul. Bon par contre, je vois que j’ai deux http 401 dont 1 entièrement vide. En regardant vite fait, j’ai un http 401.2. J’ai aussi deux http 500.

Par contre, tu pourrais m’expliquer en bref comment utiliser ce super outil ? Parce que là, j’ai juste regardé en vrac.

Alors les 401 vides c’est tout à fait normal, je pense que ton CRM n’est pas accessible sans auth, donc le protocole HTTP se déroule comme prévu : 1) requete du client, 2) blam par le serveur “t’es qui ?”, 3) ok donc requete avec les identifiants par le client, 4) ok, tu peux rentrer.

Sous fiddler, t’as l’envoi/réponse sur une seule ligne, donc normalement, après un 401 tu dois avoir un autre appel avec qq paramètres en plus dans le header et une réponse positive (200) ou un tir (500).

Double cliques sur le ligne avec l’erreur 500, et va voir à droite dans la partie “response” si tu trouves des infos dans le retour du serveur.

Edit : F12 le cheat code à connaitre pour activer/désactiver fiddler à la volée.

A regarder dans quel onglet ? Session Inspector ? et quel sous-onglets ?
Partie gauche du haut ? ou du bas ? Ce qui est des plus étrange, lorsque le nom de l’organisation est pas bien fournit, le batch me génère bien une exception 401 sur la console.

Cela dit, je regarderais toussa demain matin. Il est tard.

Lorsque tu doubles cliques sur une ligne, il se place tout seul sur Session Inspector.

L’onglet session inspector est découpé en 2 : la partie haute correspond à la requête, celle du bas à la réponse.

Les sous-onglets importants sont TextView (pour l’xml au format brut) et Xml (pour l’xml dans une treeview).

Alors, en response, j’ai un Generic SQL Error et pas plus de détails même pas un message me disant si l’user ne dispose pas de droits. ><

Bon, j’ai quand même une piste, je dois googolifier (j’ai le droit d’inventer les mots si je veux :slight_smile: ) sur ce message d’erreur pour voir s’il y aurait pas une solution.

Je reviens sur le sujet, enfin pas vraiment non plus. Si je suis un peu plus HS et qu’il faut créer un nouveau topic, faites moi signe.

J’ai laissé de coté l’histoire de l’exception plus haut et j’ai fait autrement pour l’instant, enfin pour ce que j’avais envie de faire. Maintenant, soucis, je rencontre toujours le même message d’erreur mais à des circonstances différentes.

Le but de mon appli c’est d’importer des données d’une base oracle vers la CRM 4.0. A la base, elle ne faisait que des imports vers une CRM 3.0. Le programme semblait tourner impeccablement jusqu’à aujourd’hui. Je récupère les données de ma requete SQL et je le mappe vers l’entité de ma CRM.
Là, c’est bon, ça roule. Mais au moment d’executer le mappage via le webservice, BAM !! dans mes dents, j’ai une exception (le même que plus haut).

Pour tenter de cerner un peu plus l’exception, je lance fiddler. Mais ce con me ferme carrément ma connexion oracle. Du coup, mon appli d’import plante dès le début du processus d’import (désolé pour les répétitions).

Je pensais que Fiddler ne faisait que tracer l’évolution des connexions/communications avec la Webservice mais apparemment, il fait bien plus que ça. :confused:

Une idée pourquoi fiddler me déconnecte de la base Oracle pendant le processus d’import ?
Et puis si vous avez une quelconque idée sur le pourquoi du comment de l’exception, je veux bien aussi.

Edit : concernant le problème ci-dessus, le problème a été résolu. La chaine était plus petite que celle contenu dans Oracle.