2013-01-24 4 views
0

저는 C# MVC 프로젝트에서 신뢰할 수없는 SOAP 웹 서비스를 사용하고 있습니다. 나는 그 서비스에 대한 통제권이 없다. 간헐적으로 응답하지 않는 경우가 있습니다. 클라이언트 측에서 메시지를 다시 보내려는 일정한 간격으로 서비스에서 응답을받을 때까지 간단한 방법이 있습니까?SOAP 끝점에 메시지를 전달하는 방법은 무엇입니까?

MSMQ와 안정성을 살펴 보았지만 두 가지 옵션 모두 웹 서비스를 일부 제어해야합니다. 클라이언트 측에서이 작업을 수행하는 데 도움이 될만한 것이 있습니까?

답변

3

아마도 이미 알아 냈으므로 문제는 많은 사람들에게 커다란 문제입니다. "멱등수"와 "웹 서비스"를 찾으십시오. Idempotency는 단순히 요청/응답을 보장 할 수있는 것 이상을 의미하지만, 검색을 통해 많은 읽을 거리를 얻을 수 있습니다.

"오랜 기간 동안 응답을 중지하십시오."라는 메시지가 드물게 나타나면 DarkWanderer는 이러한 문제에 대한 매우 강력한 해결책을 제시했습니다.

하지만 전화가 많으면 잠자기가 작동하는 스레드를 먹을 수 있으므로 대기열에 의존해야합니다.

통화가 비 트랜잭션적이고 중요하지 않은 경우에는 반드시 자신의 큐 메커니즘을 코딩 할 수 있습니다. 이것이 쉬운 것처럼 보일 수도 있지만, 스레딩, 복잡한 콜백, 로깅, 능동적 인 에러 핸들링 등을 요구할 수 있습니다. 많은 가난한 영혼들은 간단한 해결책으로 시작된 것이 유지의 악몽으로 바뀌 었다고보고했습니다.

이제 귀하의 요구 사항 중 하나는 앱 풀 재활용에서 살아남 아야한다는 것입니다. 그렇다면 우리는 중요한 (그리고 아마도 트랜잭션적인) 큐잉의 마지막 범주에 있습니다.

처음부터 MSMQ를 권하고 싶습니다. 그것은 귀하의 모든 문제를 처리하고 api는. NET에 있으며 요즘 정말 좋습니다. 예, 전체 솔루션에 복잡성을 추가 할 수는 있지만 문제 도메인에서 비롯됩니다.

+0

MSMQ에 대한 혐오감은 없지만 MSMQ에서 대기열 통신을 위해 큐에 참조 된 모든 항목은 * ahem *으로 간주됩니다. 자습서 나 저를 올바른 방향으로 가리키고있는 저를 지적 해 주시겠습니까? – atevans

+0

선택할 수있는 출처가 너무 많습니다. 그리고 내가 어떻게 그리고 왜 당신이 그 웹 서비스를 호출하는지에 대한 세부 사항을 알지 못하는만큼 많은 옵션이 있습니다. 하지만 기본적으로 귀하의 요청은 대기열에 메시지를 드롭해야합니다. 그런 다음 호출 부분에서 해당 메시지를 들여다 보며 성공적이면 대기열에서 메시지를 제거 할 수 있습니다. 그리고 대기열을 사용하고 모든 서비스 호출이 이루어 지는지 확인하는 시작 검사. 이것은 매우 기본적인 아키텍처입니다. –

+0

대기열을 모니터링하는 외부 서비스가 필요합니다. 내 이해 MSMQ 외부 코드를 활성화 할 수 없습니다. – atevans

1
while (true) { 
    try { 
     var response = webServiceClient.CallMethod(); 
     if (response.Successful()) 
      break; 
     Sleep(retryInterval); 
    } catch {} 
} 

그리고 그 수단이, 당신은 단지 웹 서비스를 호출 계속해야, 어떤 메시지 큐 또는 뭔가가 필요하지 않습니다. 그 질문에 대답합니까?

+0

좋아요, 웹 응용 프로그램에서 전화를 걸었습니다. 이 성공하기 전에 응용 프로그램 풀 재활용 할 수 있습니다. 그 중요한 정보로 제 질문을 업데이트했습니다. – atevans

+0

그러면 메시지 대기열로 사용되는 간단한 중간 서비스가 필요합니다. 자신이 작성한 프로그램은 MSMQ보다 구현이 빠르며 서버를 변경하지 않아도됩니다. – DarkWanderer

관련 문제