2011-08-09 3 views
1

Hy, 모두.wcf netmsmq 트랜잭션 서비스

흥미로운 사례가 있습니다. netcms 바인딩을 기반으로하는 wcf 서비스 - 클라이언트 통신을 Windows 서비스 응용 프로그램에서 호스팅하려고했습니다. 그래서 호스트 서비스에 문제가 생겼습니다. 대기열에서 메시지를받을 수 없습니다. MSDTC는 트랜잭션 롤백을 보여줍니다. 그리고 일부 시도 후에 메시지가 재시도 서브 큐로 이동 중입니다. ServiceHost가 실패한 상태가되고 다시 시작되면 다시 실패합니다. 그래서 호스트 응용 프로그램에는 예외도없고 호스트 오류 상태를 제외하고는 아무 것도 없습니다. 두 건의 계약이있는 서비스가 있습니다 (중요 할 경우).

[ServiceContract] 
public interface IService 
{ 
    [OperationContract(IsOneWay = true)] 
    void Send1(MyDataContract data); 

    [OperationContract(IsOneWay = true)] 
    void Send2(MyDataContract data); 
} 
[DataContract] 
public class MyDataContract 
{ 
    [DataMember] 
    public string From { get; set; } 
    [DataMember] 
    public string Host { get; set; } 
    [DataMember] 
    public string To { get; set; } 
    [DataMember] 
    public DateTime SendTime { get; set; } 
} 

일부 서비스 구현

[OperationBehavior(TransactionScopeRequired = true, 
       TransactionAutoComplete = true)] 
public void Send1(MyDataContract dc) 
{......} 

서비스 설정 : = "net.msmq : // localhost를/개인/MYSERVICE"

< 엔드 포인트 주소 바인딩 = "netMsmqBinding"계약 = "IService "bindingConfiguration ="NetMsmqBinding_IService "/ >

메시지가 대기열에 있습니다. 클라이언트 서비스가 정상적으로 작동합니다. 따라서 런타임 메서드에서 서비스 호스트의 Send1이 실행되지 않습니다. 하지만 Retry subqueue에서 들어오는 대기열로 메시지를 이동 한 후 HostFaulted 이벤트를 처리합니다. 그게 내가 말할 수있는 전부 야.

어떤 도움이 필요합니까?

+0

위의 설명에서 문제를 구상하기는 어렵습니다. 가능한 경우 코드와 함께 오류를 언급하십시오. –

+0

나는 단지 더 많은 정보를 추가했습니다. 도움이 되니? – cyssima

+0

NetMsmqBinding_IService에 대한 바인딩 구성을 게시 할 수 있습니까? 나는 이것이 당신의 큐가 트랜잭션 속성을 가지고있는 Transactional로 설정되지 않았다고 생각한다. – DaveRead

답변

0

그래서 문제를 감지하는 데 하루 정도 걸립니다. 그래서 단계별로 : 1. msmq wcf에 microsoft 샘플이 있습니다. 3. 큰 메시지가 있습니다. (1Mb가 더 큽니다.) 기본적으로 WCF는 큰 메시지를 역 직렬화 할 수 없습니다. 메시지.

maxReceivedMessageSize maxBufferPoolSize 및 을 설정하는 것이이 켜지지했다 그러나 그것은 질문 - 왜 클라이언트 WCF successfuly 확장 된 구성 :

내 조언없이 같은 큰 메시지를 보낼 : WCF 세트 패키지 크기와 풀의에 가능한 최대 (해당 서비스 만 사용하는 경우).