문제

MSMQ를 통해 작동하는 WCF 로깅 서비스가 있습니다.항목은 Sql Server 2005 데이터베이스에 기록됩니다.TransactionScope 외부에서 사용되는 경우 모든 기능이 올바르게 작동합니다.TransactionScope 인스턴스 내에서 사용되는 경우 호출로 인해 항상 트랜잭션이 중단됩니다.메시지 = "거래가 중단되었습니다."

이 호출이 트랜잭션 내에서 작동하도록 하려면 어떻게 해야 합니까?가능합니까?클라이언트 트랜잭션이 서비스 경계를 ​​넘어 흐르려면 바인딩이 트랜잭션 흐름을 지원해야 하며, 이는 NetNamedPipeBinding, NetTcpBinding, WSHttpBinding, WSDualHttpBinding 및 WSFederationHttpBinding으로만 바인딩을 즉시 제한한다는 내용을 읽었습니다.

도움이 되었습니까?

해결책

나는 MSMQ에 대해 자세히 알지는 못하지만 Tom Hollander가 쓴 정말 좋은 블로그 게시물 시리즈가 있습니다. MSMQ, IIS 및 WCF:아이들이 잘 놀 수 있게 해주기 - 3부에서는 Tom이 거래에 관해 이야기하는 링크가 제공됩니다.

MSMQ는 트랜잭션이 가능하거나 그렇지 않을 수 있습니다.그리고 WCF에서는 서비스 계약과 개별 작업 계약(메서드)을 트랜잭션 컨텍스트 허용, 거부 또는 요구 여부와 같은 트랜잭션 관련 특성으로 꾸밀 수 있습니다.

내가 아는 한, 귀하의 설정에서는 MSMQ 부분이 트랜잭션이 되는 것을 원하지 않지만 주변 트랜잭션이 있는 경우에도 이를 사용할 수 있어야 합니다.이 경우 다음과 같이 작업 계약에 TransactionFlow="ALlowed"를 추가해야 합니다.

[ServiceContract]
public interface ILoggingService
{
  [OperationContract]
  [TransactionFlow(TransactionFlowOption.Allowed)]
  void LogData(......);
}

그러면 됩니다!

마크

다른 팁

쓸데없는 질문이라 죄송합니다...

내 문제를 해결했습니다.배치해야 했어요

[TransactionFlow(TransactionFlowOption.Allowed)]

서비스 계약의 운영에 대해

[OperationBehavior(TransactionScopeRequired=true)] 

계약 이행(서비스 자체)에 관한 것입니다.

대접을받습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top