できません。チャネルに障害が発生すると、それは完全に障害になります。新しいチャネルを作成する必要があります。WCF チャネルは (いわば) ステートフルであるため、障害のあるチャネルは状態が破損している可能性があることを意味します。
できることは、使用しているロジックをユーティリティ メソッドに入れることです。
public static class Service<T> where T : class, ICommunicationObject, new()
{
public static void AutoRepair(ref T co)
{
AutoRepair(ref co, () => new T());
}
public static void AutoRepair(ref T co, Func<T> createMethod)
{
if ((co != null) && (co.State == CommunicationState.Faulted))
{
co.Abort();
co = null;
}
if (co == null)
{
co = createMethod();
}
}
}
次に、次の方法でサービスを呼び出すことができます。
Service<SampleServiceClient>.AutoRepair(ref service,
() => new SampleServiceClient(someParameter));
service.SomeMethod();
または、デフォルトのパラメーターなしのコンストラクターを使用する場合は、次のようにします。
Service<SampleServiceClient>.AutoRepair(ref service);
service.SomeMethod();
サービスが の場合も処理するため、null
呼び出す前にサービスを初期化する必要はありません。
私が提供できる最高のものです。たぶん、他の誰かがより良い方法を持っています。