Obtenir les erreurs WebClient sous forme de chaîne

J'ai un outil de diagnostic qui teste un service web.

Je veux que l'outil signale quand il y a des problèmes, donc j'ai déployé un service avec un problème avec le contrat pour le tester.

Lorsque je navigue vers elle, je reçois une page avec un message très descriptif tel que:

Un ExceptionDetail, probablement créé par IncludeExceptionDetailInFaults = true, dont la valeur est: Système.InvalidOperationException: une exception a été levée dans un appel à un WSDL exportation extension:
Système.ServiceModel.Description.DataContractSerializerOperationBehavior contrat: DataContract pour le type XXX ne peut pas être ajouté à DataContractSet depuis le type XXX avec le même nom de contrat de données XXX dans l'espace de noms XXX est déjà présent et les contrats ne sont pas équivalentes etc..

Ce que je veux, c'est pouvoir appeler:

myErrorMsg = WebClient.DownloadString("MyBadService.svc");

Et obtenez ce message d'erreur utile sous forme de chaîne, mais j'obtiens L'Exception WebException suivante:

Le le serveur distant a renvoyé une erreur: (500) Erreur interne du serveur.

Comment puis-je obtenir le même message d'erreur que j'ai reçu dans le navigateur retourné en tant que chaîne, sans obtenir une exception?

Merci.

25
demandé sur lockstock 2011-08-12 10:42:27

1 réponses

Vous devez attraper l'exception et lire la réponse.

catch (WebException exception)
{
  string responseText;

  var responseStream = exception.Response?.GetResponseStream();

  if (responseStream != null)
  {
      using (var reader = new StreamReader(responseStream))
      {
         responseText = reader.ReadToEnd();
      }
  }
}
59
répondu ccellar 2016-08-24 13:39:24