web-dev-qa-db-ja.com

WebClientエラーを文字列として取得

Webサービスをテストする診断ツールがあります。

問題が発生したときにツールに報告させたいので、契約に問題のあるサービスを展開してテストしました。

それを閲覧すると、次のような非常に説明的なメッセージが記載されたページが表示されます。

ExceptionDetail。おそらくIncludeExceptionDetailInFaults = trueによって作成され、その値は次のとおりです。System.InvalidOperationException:WSDLエクスポート拡張機能の呼び出しで例外がスローされました。
System.ServiceModel.Description.DataContractSerializerOperationBehaviorコントラクト:名前空間XXXに同じデータコントラクト名XXXを持つタイプXXXが既に存在し、コントラクトが同等ではないため、タイプXXXのDataContractをDataContractSetに追加できません。

私が欲しいのは、電話できるようにすることです。

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

この便利なエラーメッセージを文字列として取得しますが、次のWebExceptionが発生します。

リモートサーバーがエラーを返しました:(500)内部サーバーエラー。

例外を取得せずに、ブラウザで受信したのと同じエラーメッセージを文字列として返すにはどうすればよいですか?

ありがとう。

29
lockstock

例外をキャッチして応答を読み取る必要があります。

catch (WebException exception)
{
  string responseText;

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

  if (responseStream != null)
  {
      using (var reader = new StreamReader(responseStream))
      {
         responseText = reader.ReadToEnd();
      }
  }
}
63
ccellar