문제

가 WCF 서비스를 만들고 이를 활용하 netMsmqBinding 구속력이 있습니다.

이것은 간단한 서비스를 전달하는 Dto 을 내는 서비스 방법과 기대하지 않습니다.메시지가에 위치 MSMQ,그리고 일단 선택에 삽입된 데이터베이스입니다.

무엇이 가장 좋은 방법은 없는지 확인하기 위해 데이터가 손실되는 것.

내가 노력 2 개의 다음 방법:

  1. 던지 예외가

    이 장소에서 메시지 큐동 열람.로 이 때 나 strvice 시작

  2. 설정 receiveRetryCount="3"에 바인딩

    후 3 시도하는 일이 instantanously,이를 떠날 것으로 보인다는 메시지 큐지만,오류 내 서비스입니다.는 다음 서비스를 이 과정을 반복.

이상적으로 수행하려고 따른다:

Try 프로세스는 메시지

  • 이것이 실패하는 경우,5 분 기다리는 메시지를 다시 시도하십시오.
  • 는 경우 프로세스가 실패하는 3 시간,메시지를 이동을 큐.
  • 시 서비스는 푸시 메시지를 모두에서 큐로 큐할 수 있도록 처리됩니다.

를 달성할 수 있는 이?그렇다면 어떻게?할 수 있습니점 나은 어떤 좋은 기사가 최상의 방법을 활용하 WCF 및 MSMQ 내 주 sceneria.

어떤 도움을 많이 주시면 감사하겠습니다.감사합니다!

몇 가지 추가 정보

내가 사용하 MSMQ3.0Windows XP Windows Server2003.불행하게도 내가 사용할 수 없습니다 내에서 독 메시지 지원을 대상으로 MSMQ4.0Vista/2008.

도움이 되었습니까?

해결책

가의 샘플 SDK 에서는 데 유용할 수 있습니다.기본적으로,그것은 무엇입니까 연결하여 IErrorHandler 구현하의 서비스는 오류를 때 WCF 선언의 메시지"poison"(즉할 때 구성된 모든 재시도 횟수를 모두 사용).What 샘플 않는 메시지를 이동하는 다른 큐를 다시 시작 ServiceHost 와 관련된 메시지(는 것이기 때문이 있 오류가 발생한 경우 독 메시지가 발견되었).

그것의 아주 예쁜 샘플이지만,그것은 유용할 수 있습니다.거기에 몇 가지 제한 사항만:

1-이 여러 개 있는 경우 종점에 연결된 서비스(즉노출을 통해 여러 대기열)없는 방법을 알고 있는 큐 독 메시지가 도착했습니다.만 있는 경우 하나의 큐,이은 문제가되지 않습니다.나는 보지 못했 공식에 대한 해결 방법이지만,나는 실험,하나의 가능한 대안으로는 내가 여기서 설명: http://winterdom.com/weblog/2008/05/27/NetMSMQAndPoisonMessages.aspx

2 번 문제는 메시지를 이동하는 다른 큐,그것은 당신의 책임,그래서 당신까지 이동하다 다시 처리하는 큐면 시간 제한은행(또는 연결하는 새로운 서비스하는 큐를 처리합니다.)

솔직히 말해서,어느 경우에,당신이 찾고있는 일부에"수동"여기서 일하는 WCF 단지 커버하지 않습니다.

나는 최근에 작업에 다른 프로젝트가 필요조건을 명시적으로 제어하는 방법을 자주 재시도 일어나,그리고 현재 해결책이 집합을 만드는 큐를 다시 시도 및 수동으로 메시지를 이동 사이에 다시 시도 큐 및 메인 처리 큐 집합을 기반으로 타이머의 일부 추론을 사용하 raw 시스템입니다.메시징은 재료를 처리하 MSMQ 큐입니다.그것은 작동하는 것 같다 꽤 잘하지만,몇 개는 경우에 당신이 방법입니다.

다른 팁

내 생각으로 MSMQ(avaiable 만에 Vista)할 수 있습을 다음과 같다:

<bindings>
    <netMsmqBinding>
        <binding name="PosionMessageHandling"
             receiveRetryCount="3"
             retryCycleDelay="00:05:00"
             maxRetryCycles="3"
             receiveErrorHandling="Move" />
    </netMsmqBinding>
</bindings>

WCF 즉시 재시도에 대한 ReceiveRetryCount 시간 후 첫 번째 호출에 실패입니다.후에 배치했는 메시지로 이동 를 다시 시도합니다.후 지연의 RetryCycleDelay 분 메시지로 이동 재시도 큐에서 끝점에 큐고 일괄 처리가 다시 시도합니다.이 반복될 것입 MaxRetryCycle 시간입니다.면 모두 실패하는 메시지에 따라 처리 receiveErrorHandling 할 수 있는 이동 (독 큐),거부,드롭 또는 오류

방법에 의해 좋은 텍스트에 대해 WCF 및 MSMQ 은 chapther9 의 Progammig WCF 책에서 유발 Lowy

사용하는 경우에는 SQL-서버는 다음을 사용한 분산 트랜잭션 이후 모두 MSMQ 및 SQL-Server 지원합니다.무슨 일을 감싸는 데이터베이스 쓰기에 TransactionScope 차단 및 콜 범위가 있습니다.전체()경우에만 성공한다.그것이 실패하는 경우,그 때 WCF 방법은 메시지를 반환한다 다시 배치됩니다으로 큐에 다시 시도했다.여기에 손질한 버전의 코드를 사용:

    [OperationBehavior(TransactionScopeRequired=true, TransactionAutoComplete=true)]
    public void InsertRecord(RecordType record)
    {
        try
        {
            using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
            {
                SqlConnection InsertConnection = new SqlConnection(ConnectionString);
                InsertConnection.Open();

                // Insert statements go here

                InsertConnection.Close();

                // Vote to commit the transaction if there were no failures
                scope.Complete();
            }
        }
        catch (Exception ex)
        {
            logger.WarnException(string.Format("Distributed transaction failure for {0}", 
                Transaction.Current.TransactionInformation.DistributedIdentifier.ToString()),
                ex);
        }
     }

나는 이를 테스트하여 대기 큰 하지만 알려진 레코드 수,자 WCF 시작이 많은 스레드의 많은 부분을 처리하는 동시에 그들을(도달하면 16 스레드--16 메시지를 해제 큐에 한 번),다음을 죽이는 프로세스의 중앙에 작업입니다.때 프로그램을 다시 시작 메시지를 다시 읽을 큐에서 처리되는 다시 아무 일도 발생하지 않은 것처럼,그의 결론에서 시험 데이터베이스의 일관성 및 누락 없이 기록합니다.

분산 트랜잭션 관리자는 주변 존재 때,그리고 당신은 새 인스턴스를 만들의 TransactionScope 그것은 자동으로 검색에 대한 현재 트랜잭션의 범위 내에서 방법 invokation--있어야 만들어진 이미 WCF 때 그것은 팝업 메시지가 오프 큐 호출되는 당신의 방법입니다.

불행하게도 내가 붙어에 윈도우 XP 윈도우 서버 2003 도록 하는 옵션이 아닙니다.-(내가 다시는지 명확히 내 질문에 내가 찾는 이 솔루션을 게시한 후 실현할 수 없었용)

내가 찾는 것은 하나의 솔루션을 설정 사용자 정의 처리기는 것이 이 메시지를 다른 큐 또는 독 큐와 재시작 내 서비스입니다.이 미친 듯하다.상상 내 Sql 서버가 다운되었을 때 얼마나 자주 서비스는 다시 시작됩니다.

그래서 나는 종료했을 허용하는 라인 결함에 메시지 큐가 있습니다.또한 로그인 치명적인 메시지를 나의 시스템 로그인 서비스는 이 일이 일어났습니다.일단 우리의 문제가 해결되 내가 다시 시작과 서비스는 메시지를 받기 시작 처리 again.

실 re-processing 이 메시지 또는 다른 것이 모두 실패하는,그래서 그 이유를 이동해야이 메시지와는 다른 사람을 또 다른 큐가 있습니다.도뿐만 아니라 막을 내는 서비스,그리고 다시 시작할 때 모든 운영으로 예상된다.

aogan,당신은 완벽한 해답을 위한 MSMQ4.0 지만,불행히도에 대한 나

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top