백그라운드에서 스레드에서 프록시를 열려고 시도하고 스레드가 프록시의 새 인스턴스를 만들고 서비스 메서드를 호출하고 서비스를 삭제 한 직후.스레드에서 여러 서비스 시작
이 모든 스레드에서 발생 :
var background = new Thread(() =>
{
var proxy = new AssignmentSvcProxy(new EndpointAddress(worker.Address));
try
{
proxy.Channel.StartWork(workload);
proxy.Dispose();
}
catch (EndpointNotFoundException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (CommunicationException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (TimeoutException ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
catch (Exception ex)
{
logService.Error(ex);
proxy.Dispose();
proxy = null;
}
}) { IsBackground = true };
background.Start();
은 내가 CloseTimeout, openTimeout의, ReceiveTimeout, SendTimeout에 대한 최대 시간 초과를 설정 한 경우에도 발생하는 간헐적 인 시간 제한 문제를보고 계속.
디자인에 현명한 해결책이 있는지 확인하고 싶습니다. 즉, 스레드에서 서비스를 열어서 삭제하는 것입니다.
EDIT :
프록시는 내부적으로 정의는 각 스레드의 다른 엔드 포인트와 결합 채널을 확립한다.
그것은 내가 "프록시"를 기대하는 위치를 "서비스"말하는 것을 조금 혼란, 예를 들어, "스레드가 서비스를 엽니 다" "스레드가 내 서비스의 프록시를 여는"것이 맞지 않습니까? – Jeroen
죄송합니다. 질문을 업데이트 했으므로 기본적으로 내 서비스는 이미 열려 있지만 프록시는 단지 proxy.Channel.StartWork (작업 부하)를 호출합니다. 그 특정 서비스 (이미 자체 호스팅)의 - 이해가 되니? –
try-catch 절에'finally'를 추가 할 수 있습니다. 예외가 발생하더라도 코드를 마지막으로 실행합니다. 당신의 이슈에 관해서, 나는 불확실합니다. 나는 또한 당신의 바인딩을 생성자에 전달하는 것이 현명 할 것이라고 믿는다. 이것은 타임 아웃 예외의 원인 일 수 있습니다. –