私はwcfクライアントの再接続ロジックを実装しようとしています。私は、現在のチャンネルがフォールト状態に入った後に新しいチャンネルを作成しなければならないことを知っています。私は、チャネル障害が発生し、イベントハンドラでこれをやった:WCFコールバックチャネルがエラー
internal class ServiceClient : DuplexClientBase, IServiceClient
{
public ServiceClient(ICallback callback, EndpointAddress serviceAddress)
: base(callback, MyUtility.GetServiceBinding("NetTcpBinding"), serviceAddress)
{
// Open the connection.
Open();
}
public void Register(string clientName)
{
// register to service
}
public void DoSomething()
{
// some code
}
}
public class ClientApp
{
private IServiceClient mServiceClient;
private ICallback mCallback;
public ClientApp()
{
mServiceClient = new ServiceClient(mCallback, new EndpointAddress("someAddress"));
mServiceClient.Register();
// register faulted event for the service client
((ICommunicationObject)mServiceClient).Faulted += new EventHandler(ServiceClient_Faulted);
}
void ServiceClient_Faulted(object sender, EventArgs e)
{
// Create new Service Client.
mServiceClient = new ServiceClient(mCallback, new EndpointAddress("someAddress"));
// Register the EI at Cell Controller
mServiceClient.Register();
}
public void DoSomething()
{
mServiceClient.DoSomething();
}
}
しかし、私のユニットテストで私はまだ「通信オブジェクト、System.ServiceModel.Channels.ServiceChannelを取得し、それが故障しているため、通信に使用することはできません状態 "例外です。
コールバックチャネルにもフォルトが発生する可能性はありますか?はいの場合、コールバックチャネルをどのように置き換えることができますか?
ユニットテストが例外をトリガするときに行うことを指定できますか? –
私のユニットテストでは、私はサービスホストとクライアントインスタンスを作成します。サービスにクライアントを登録し、参照をnullに設定してサービスを停止します。その後、私は20秒待っている(私はInactivityTimeoutof 10秒で信頼できるセッションを使用しているので、接続が20秒後に失われていると確信している)、クライアント上でDoSomething()メソッドを呼び出します。今度はサービスを再作成し、クライアントが再接続することを期待します。その瞬間、私は例外を得る。 – phatoni