2013-09-23 6 views
1

MSMQ를 통해 실행되는 WCF 서비스에 대한 트랜잭션 시간 제한을 동적으로 설정할 수 있어야한다는 요구 사항이 있습니다. MSDN의 예제를 따르고 있습니다 : http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.transactiontimeout.aspx. 그러나 설정중인 시간 초과가 작동하지 않는 것 같습니다.어떻게 동적으로 WCF 서비스에 대한 TransactionTimeout을 설정할 수 있습니까?

나는 TransactionTimeout 속성을 설정하는 데 사용하고 코드는 다음과 같습니다

: 내 서비스를 실행하고 내 서비스 구현에서 2 분 지연을 넣을 때

ServiceProperties properties = ...; // has a TransactionTimeout value for the service 
var serviceHost = new ServiceHost(...); 
serviceHost.Open(); 
var channelDispatchers = 
    serviceHost.ChannelDispatchers.Select(
     cd => new ChannelDispatcher(cd.Listener)).ToArray(); 
foreach (var channelDispatcher in channelDispatchers) 
{ 
    channelDispatcher.TransactionTimeout = properties.TransactionTimeout; 
} 

, 나는이 트랜잭션 참여 오류가 발생

예외 : 나는 다른 MSMQ 대기열에 쓰려고하면 큐에 보내는 동안 오류가 발생했습니다 : 지정된 트랜잭션이 입대 할 수 없습니다. (-1072824232, 0xc00e0058). MSMQ가 설치되어 실행되고 있는지 확인하십시오. 로컬 대기열로 보내는 경우, 대기열에 필요한 액세스 모드 및 권한이 있는지 확인하십시오.

누구든지 이전에이 기능을 사용할 수 있었습니까? 어떤 아이디어라도 대단히 감사하겠습니다.

미리 감사드립니다.

+0

먼저 생각 :이 작업을 수행하는 올바른 방법은 찾아 서비스 설명에 부착 된 ServiceBehaviorAttribute 개체를 수정하는 것입니다 MSMQ 및 MS DTC 서비스가 참여하는 모든 시스템에서 실행되고 있는지 확인을; 또한 서비스가 실행중인 사용자에게 필요한 읽기/쓰기 권한이있는 대기열의 액세스 권한을 확인하십시오. –

+0

모든 것이 로컬에서 실행 중입니다. 권한이 맞습니다. –

답변

0

올바른 접근 방법을 찾았습니다.

var transactionTimeout = TimeSpan.FromSeconds(...); 
var behavior = serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>(); 
behavior.TransactionTimeout = transactionTimeout.ToString(); 
serviceHost.Open();