1
다른 프로젝트에서이 작업을 수행 할 수 있었고 동일한 경로/패턴을 따르는 메신저가 있지만 어떤 것이 누락되었다고 생각합니다. MSMQ에서 알려진 유형의 메시지를 보내면 포이즌 메시지가 계속 나타납니다.알려진 유형의 대기열을 읽을 때 포이즌 메시지
DataClass 속성으로 장식 된 여러 속성이있는 ConcreteClass라는 클래스가 있습니다. ConcreteClass에서 파생 된 "Base"클래스가 있습니다. MSMQ에 메시지를 보낼 수 있지만 WCF를 사용하여 MSMQ에서 읽을 때 서비스가 항상 오류를보고 로그를 보면 독이납니다.
WCF 서비스는 기본 클래스를 다른 프로젝트에서 잘 작동하는 서명으로 사용하고 서비스에서 기대해야하는 구체적인 클래스에 대한 serviceknowntype 특성을가집니다.
[ServiceKnownType(typeof(ConcreteClass))]
public sealed class WCFServiceMSMQReader : IWCFServiceMSMQReader {
[OperationBehavior(TransactionScopeRequired = true, TransactionAutoComplete = true)]
public void ProcessIncomingMessage(MsmqMessage<BaseClass> msg) { .... do stuff .... }
}
인터페이스 :
[ServiceContract]
public interface IWCFServiceMSMQReader {
[OperationContract(IsOneWay = true, Action = "*")]
void ProcessIncomingMessage(MsmqMessage<BaseClass> msg);
}
BaseClass로 :
[DataContract]
[KnownType(typeof(ConcreteClass))]
public class BaseClass
{
... some properties here...
}
ConcreteClass :
[DataContract]
public class ConcreteClass : BaseClass {
public ConcreteClass() : base() { ... stuff ... }
public ConcreteClass(params here) : base() { .... }
}
내가 잘못 가고 어떤 아이디어가?
이 문제의 해결책에 선언해야 하는가? 그렇다면 올바른 답으로 표시하는 것을 잊지 마십시오. –