私はこれをさまざまなプロジェクトで機能させることができ、同じパス/パターンをたどっていると信じていますが、何かが欠けています。MSMQ で既知のタイプのメッセージを送信すると、有害なメッセージを受け取り続けます。
DataMember 属性で装飾されたいくつかのプロパティを持つ ConcreteClass というクラスがあります。ConcreteClass の派生元である「基本」クラスがあります。メッセージを 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);
}
ベースクラス:
[DataContract]
[KnownType(typeof(ConcreteClass))]
public class BaseClass
{
... some properties here...
}
具体的なクラス:
[DataContract]
public class ConcreteClass : BaseClass {
public ConcreteClass() : base() { ... stuff ... }
public ConcreteClass(params here) : base() { .... }
}
私が間違っているアイデアはありますか?