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