2009-10-07 5 views
4

netTcp 바인딩을 사용하여 WCF 클라이언트 및 서비스에서 트랜잭션을 사용하고 있습니다. DTC를 활성화했으며 트랜잭션이 예상대로 흐르고 있습니다.WCF 트랜잭션 시간 제한 테스트

시간 초과로 트랜잭션을 테스트하고 싶습니다. 시간 제한

<behavior name="Services.Behavior.NetTcp"> 
      <serviceTimeouts transactionTimeout="00:00:01"/> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 

및 서비스 엔드 포인트에 대한

클라이언트가 서비스에

using (TransactionScope scope = 
    new TransactionScope(TransactionScopeOption.Required,new TimeSpan(0,0,1,0))) 
    { 
    ... 

으로 거래를 시작, 내가 설정 한 거래 행위,

<service behaviorConfiguration="Services.Behavior.NetTcp" 
    name="Services.Accounts.AccountsService"> 
    <endpoint binding="netTcpBinding" bindingConfiguration="TranNetTcpBinding" 
     contract="Services.Accounts.Interfaces.IAccountsService" /> 
    <endpoint address="mex" binding="mexTcpBinding" name="MexTcp" contract="Services.Accounts.Interfaces.IAccountsService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="net.tcp://localhost:2222/Accounts"/> 
     </baseAddresses> 
    </host> 
    </service> 

및 사용하여 기본 서비스의 기본 트랜잭션 범위도 too

using (TransactionScope ts = new TransactionScope()) 
{ 

그러나 서비스와 관련하여 트랜잭션 시간이 초과되지 않습니다. 클라이언트 시간 제한을 1 분으로 줄이면 트랜잭션 시간이 초과 된 것을 볼 수 있습니다.

서비스에서 트랜잭션 옵션을 사용하면 설정 파일에서 시간 초과 값을 읽을 수 없다는 것을 알고 있습니다. 여기서는 이러한 옵션을 사용하지 않습니다.

transactionTimeout이 1 초인 경우에도 트랜잭션이 서비스에서 시간 초과되지 않는 이유가 무엇인지 알 수 있습니다. 제 경우에는 작업을 완료하기에 충분한 시간이 아닙니다.

그리고 런타임에 서비스에 설정된 시간 초과 값을 어떻게 확인합니까?

업데이트 1 : 프로그래밍 WCF 서비스 책에 Jual 로위에서
: 트랜잭션이 수신 거래보다 짧은 시간 초과로 구성되는 서비스로 흐를 때
는, 트랜잭션 서비스의 타임 아웃을 채택하고, 서비스가 더 짧은 시간 제한을 시행하게됩니다. 트랜잭션이 들어오는 트랜잭션보다 긴 시간 제한으로 구성된 서비스로 전달되면 서비스 구성은 아무 효과가 없습니다.

보낸 사람 Lerox Bustamante : From the webcast 서비스 시간 초과는 기존 트랜잭션에 참가할 경우 아무런 효과가 없지만 Jual이 말하는 것과는 반대입니다.

업데이트 2 : 테스트에서
나는 부스타가 올바른지 확인할 수 있습니다. 나는 클라이언트 트랜잭션으로 인해 서비스 구현에서 속성의 사용과 흐름, 새로운 트랜잭션을 만들 수 없습니다 서비스 인터페이스의 메소드 서명에 다음과 같은 속성

[TransactionFlow(TransactionFlowOption.NotAllowed)] 

을 적용하면

[OperationBehavior(TransactionScopeRequired = true)] 

은 서비스 구성 파일에서 지정된 시간 초과 기간을 가져오고 올바르게 시간이 초과됩니다.

감사합니다.

답변

2

클라이언트에서 시간 초과를 설정해 보았습니까?예를 들어

는 :

<binding name="IncreasedTimeout" closeTimeout="12:00:00" openTimeout="12:00:00" 
      receiveTimeout="12:00:00" sendTimeout="12:00:00"> 
+1

이 동작 시간을 증가시키고 거래와 관련이없는 것입니다. – skjagini