0

.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 に更新したところ (他のソフトウェアやクライアント ソフトウェアを更新せずに)、動作が変わりました。

論理的な説明はありますか?

4

0 に答える 0