답변

7

예, 작동합니다. 우리는 WCF를 통해 트랜잭션을 처리하고 트랜잭션 COM + 구성 요소를 처리하고 .NET 2.0 asmx 웹 서비스에서 WCF 서비스로 트랜잭션을 수동 전달합니다.

이제 설정이 까다롭지 않다는 말은 아닙니다. 대부분의 문제는 MSDTC를 모든 서버에 올바르게 설치하는 데 있다고 생각합니다.

UPDATE

우리는 DependentClone를 사용하지 않습니다. GetTransactionFromTransmitterPropagationToken을 사용하여 트랜잭션을 바이트 배열로 전달합니다. Propagating a Transaction Across AppDomains의 두 번째 예제와 매우 유사합니다. 예를 들어

:

클라이언트 :

public void CallOutOfProcessAndPassTransaction 
{ 
    Client client = new Client(); 

    client.DoSomethingTransactional(
     System.Transactions.TransactionInterop.GetTransmitterPropagationToken(
      System.Transactions.Transaction.Current) 
    ); 
} 

서비스 : 나는 솔루션이 스타일에 문제가 발견

public void DoSomethingTransactional(byte[] tx) 
{ 
    using (TransactionScope ts = new TransactionScope(
       TransactionInterop.GetTransactionFromTransmitterPropagationToken(tx))) 
    { 
     // Do Something 

     // vote to commit the transaction if the caller also agrees 
     ts.Complete(); 
    } 
} 
+0

다른 AppDomain으로 트랜잭션을 전달하는 프로세스에 대해 자세히 알려주십시오. currentTransaction.DependentClone을 호출하여 복제본을 생성하고 전달하거나 현재 트랜잭션을 전달합니까? – SiberianGuy

+0

그런 거래를하는 것은 어떻습니까? 초기 AppDomain에서만 커밋 할 수 있다고 생각하십니까? – SiberianGuy

+0

@ldsa : appdomain을 통해 트랜잭션을 전달하면 분산 트랜잭션을 처리하게됩니다. 트랜잭션을 커밋하려면 모든 참가자가 커밋을 위해 투표해야합니다. 예 : appdomain1과 appdomain2는 모두 커밋해야합니다. –

0

. 제 경우에는 부모님과 여러 자녀들을 위해 일을하고있었습니다. 그것을 작동 시키려면 TransactionScope를 부모에서만 사용해야했습니다. 내 질문/답변은 Using transactions across processes입니다.