다른 AppDomains 및 프로세스에서 System.Transactions (주로 TransactionScope)를 사용하는 것이 실제입니까?AppDomains 및 프로세스에서의 TransactionScope
DependentTransaction은 하나의 AppDomain에서만 작동합니다.
다른 AppDomains 및 프로세스에서 System.Transactions (주로 TransactionScope)를 사용하는 것이 실제입니까?AppDomains 및 프로세스에서의 TransactionScope
DependentTransaction은 하나의 AppDomain에서만 작동합니다.
예, 작동합니다. 우리는 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();
}
}
. 제 경우에는 부모님과 여러 자녀들을 위해 일을하고있었습니다. 그것을 작동 시키려면 TransactionScope를 부모에서만 사용해야했습니다. 내 질문/답변은 Using transactions across processes입니다.
다른 AppDomain으로 트랜잭션을 전달하는 프로세스에 대해 자세히 알려주십시오. currentTransaction.DependentClone을 호출하여 복제본을 생성하고 전달하거나 현재 트랜잭션을 전달합니까? – SiberianGuy
그런 거래를하는 것은 어떻습니까? 초기 AppDomain에서만 커밋 할 수 있다고 생각하십니까? – SiberianGuy
@ldsa : appdomain을 통해 트랜잭션을 전달하면 분산 트랜잭션을 처리하게됩니다. 트랜잭션을 커밋하려면 모든 참가자가 커밋을 위해 투표해야합니다. 예 : appdomain1과 appdomain2는 모두 커밋해야합니다. –