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)]
은 서비스 구성 파일에서 지정된 시간 초과 기간을 가져오고 올바르게 시간이 초과됩니다.
감사합니다.
이 동작 시간을 증가시키고 거래와 관련이없는 것입니다. – skjagini