외부 웹 서버 데이터베이스와 통신하기 위해 웹 서비스를 많이 사용하는 .Net Webform 응용 프로그램을 개발 중입니다.웹 서비스 패턴 재 연결
그래서 WS 메서드를 호출 할 때 단절과 실패를 처리하는 가장 좋은 방법을 찾으려고합니다.
지금은 호출 한 모든 WS 메서드에 대해 레이어의 종류와 같은 프록시 함수를 만들었습니다. 특정 WS 호출을 반복하여 성공적으로 호출 할 때까지 루프를 반복합니다.
모두 동기화 및 비동기 호출의 경우 문제를 해결했지만 WebService 레이어에 여분의 유지 관리 및 많은 중복 코드가 포함 된 불필요한 추가 레이어를 추가했습니다.
저는이 표준 상황에 대한 기존 해결책이 없다고 생각하지 않지만 어디에서나 찾을 수는 없습니다.
어떤 아이디어? 다음
, 내 별도의 레이어 (동기화)의 예 :
public static int WsMethod(string param1, int param2)
{
while(true)
{
try
{
return new Webpoint().WsMethod(param1, param2);
}
catch (Exception)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
}
}
}
그리고 비동기은 :
public static void WsMethodAsync(string param1, int param2, WsMethodCompletedEventHandler handler)
{
while (true)
{
try
{
var server = new Webpoint();
server.WsMethodAsyncCompleted += delegate(object sender, WsMethodAsyncCompletedEventArgs args)
{
if (args.Error != null)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
this.WsMethodAsync(param1, param2, handler);
}
else
{
handler(sender, args);
}
};
server.WsMethodAsyncAsync(param1, param2);
return;
}
catch (Exception)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
}
}
}
David, Carsten, 답장을 보내 주셔서 감사합니다. 이제는 연결 문제와 관련이있는 모든 예외를 식별해야한다고 생각합니다. 즉, 무한 루프가 아닌 n 회 시도하고 다시 시도해 보는 것이 좋습니다. 다른 모든 예외/오류의 경우 호출자에게 제어권을 돌려줍니다. 그러나이 방법에 따라 각 메소드 프록시 함수를 수정하지만 일반 중복 코드로 인해 여전히 어려움을 겪고 있습니다. – Tuk
@Tuk : 이상하게도 그렇게하지 않아도됩니다. 프록시는 현재 수행중인 작업 만 수행해야합니다. 프록시를 호출하는 코드는 예외를 잡아 원하는 방식으로 처리 할 수 있습니다. 몇 번 다시 시도하려는 경우가있는 경우 해당 항목을 식별하고 해당 항목에 대해서만 구현하십시오. 그러나 그것은 목표가되어서는 안됩니다. 재 시도 코드가 오류를보고하여 근본 원인을 식별하고 수정해야합니다. – David