2012-06-07 3 views
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() { .... } 

} 

내가 잘못 가고 어떤 아이디어가?

답변

0

서비스 알려진 유형은 인터페이스

+0

이 문제의 해결책에 선언해야 하는가? 그렇다면 올바른 답으로 표시하는 것을 잊지 마십시오. –

관련 문제