2

そのため、MSMQ にメッセージを配置できるときは、古いコード ベースは正常に機能していました。しかし、私が受け取った新しいコードベースは機能せず、正直なところ何が欠けているのかわかりません。

基本クラス:

    [DataContract]
    [KnownType(typeof (ReportA))]
    [KnownType(typeof (AUpdate))]
    [KnownType(typeof (AStatusReport))]
    [KnownType(typeof (MsgHeader))]
    [KnownType(typeof(BRegistationReport))]
    [KnownType(typeof(BAlarmReport))]
    [KnownType(typeof(AlarmData))]
    [KnownType(typeof(DmpAlarmData))]
    public class MyMessage {....}

次に、ここの特定のクラス、BAlarmReport (MyMessage から派生):

[DataContract]
public class BAlarmReport: MyMessage 
{ ... }

次に、DmpAlarmData から継承されたベースとして AlarmData を使用できます。

[DataContract]
    public class DmpAlarmData : AlarmData
{ .. }

MSMQ に配置する方法は以前と同じで、新しいコードベースを取得するまで機能していました。

var queue = new MessageQueue(@"FormatName:Direct=OS:" + mMSMQQueueNameAndLocation);
var msg = new Message {Body = MyMessage.CreateMessage() };

using (var ts = new TransactionScope(TransactionScopeOption.Required))
{
    queue.Send(msg, MessageQueueTransactionType.Automatic); // send the message
    ts.Complete(); // complete the transaction
}

私は何かを逃していますか?

4

1 に答える 1

1

修理済み。はぁ

内部例外を掘り下げると、一部のクラスにパラメーターなしのコンストラクターがないという問題が発生しました。ただし、サブクラスも基本クラス自体の XmlInclude 属性で宣言する必要があります。

于 2012-09-20T00:25:43.803 に答える