.NET フレームワークのバージョンに応じて、WCF サービスによってスローされた FaultExceptions を処理するときに、クライアントで異なる動作が発生しています。
サービスは、カスタム フォールトを定義します。
[DataContract]
public class MyFault
{
[DataMember]
public int MyId { get; set; }
}
サービスのインターフェース:
[ServiceContract]
public interface IMyService
{
[OperationContract]
[FaultContract(typeof(MyFault))]
MyResponse DoSomething(MyRequest request);
}
クライアントは例外を処理します。
try
{
client.DoSomething(myrequest);
}
catch (FaultException<MyFault> ex)
{
...
}
.NET 4.5 マシンでは、障害を認識し、FaultException<MyFault>
期待どおりに処理します。
ただし、.NET 4 マシンでは、障害をFaultException
(非一般的な) ものとして扱うため、キャッチに到達することはありません。
マシン上のトラフィックをキャプチャして、通信に違いがあるかどうかを確認しました。リクエストとレスポンスはどちらも同じです。.NET 4 マシンを .NET 4.5 に更新したところ (他のソフトウェアやクライアント ソフトウェアを更新せずに)、動作が変わりました。
論理的な説明はありますか?