WCF クライアントで特定の FaultException をキャッチしようとしています。基本的に、障害クラスから内部記述を抽出する必要があります。これにより、上位層が何でもできるように別の例外にパッケージ化できます。
私は何度もこれを成功させてきましたが、今回の違いは、例外をスローするメソッドの上で宣言されたサービス参照属性からわかるように、fault が配列として宣言されていることです。
[System.ServiceModel.FaultContractAttribute(typeof(FaultClass[]), Action = "http://whatever/", Name = "whateverBusinessFault")]
これは私のコードです:
try
{
// call service here
}
catch (FaultException<FaultClass[]> ex)
{
if (ex.Detail != null && ex.Detail.Length > 0)
{
throw new CustomException(ex.Detail[0].description);
}
else
{
throw;
}
}
問題は、WCF トレースからの SOAP 応答でデータ (説明フィールドなど) を確認できても、コード内の詳細 (配列) が常に空になることです。
したがって、必要なものは間違いなく戻ってきますが、何らかの理由で逆シリアル化されないか、コードからアクセスできません。
どんな助けでも大歓迎です!
更新:
@Darin の提案を試してみましたが、うまくいきませんでした。XmlReader から抽出している文字列は "/r/n" です。
var sb = new StringBuilder();
using (XmlReader reader = fault.GetReaderAtDetailContents())
{
while (reader.Read())
sb.AppendLine(reader.ReadOuterXml());
}
var detail = sb.ToString();
詳細セクションがまったく表示されないようです。