Webサービスをテストする診断ツールがあります。
問題が発生したときにツールに報告させたいので、契約に問題のあるサービスを展開してテストしました。
それを閲覧すると、次のような非常に説明的なメッセージが記載されたページが表示されます。
ExceptionDetail。おそらくIncludeExceptionDetailInFaults = trueによって作成され、その値は次のとおりです。System.InvalidOperationException:WSDLエクスポート拡張機能の呼び出しで例外がスローされました。
System.ServiceModel.Description.DataContractSerializerOperationBehaviorコントラクト:名前空間XXXに同じデータコントラクト名XXXを持つタイプXXXが既に存在し、コントラクトが同等ではないため、タイプXXXのDataContractをDataContractSetに追加できません。
私が欲しいのは、電話できるようにすることです。
myErrorMsg = WebClient.DownloadString("MyBadService.svc");
この便利なエラーメッセージを文字列として取得しますが、次のWebExceptionが発生します。
リモートサーバーがエラーを返しました:(500)内部サーバーエラー。
例外を取得せずに、ブラウザで受信したのと同じエラーメッセージを文字列として返すにはどうすればよいですか?
ありがとう。
例外をキャッチして応答を読み取る必要があります。
catch (WebException exception)
{
string responseText;
var responseStream = exception.Response?.GetResponseStream();
if (responseStream != null)
{
using (var reader = new StreamReader(responseStream))
{
responseText = reader.ReadToEnd();
}
}
}