1

私はこれをさまざまなプロジェクトで機能させることができ、同じパス/パターンをたどっていると信じていますが、何かが欠けています。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() { .... }

}

私が間違っているアイデアはありますか?

4

1 に答える 1

0

サービスの既知の型はインターフェイスで宣言する必要があります

于 2012-06-07T17:12:20.723 に答える