2012-05-07 6 views
1

私は単純な例でMassTransitで遊んでいますが、正しいデータを受け取っていないので、間違っていることはわかりません。 は、私はこのコードをデバッグする場合、私はTweetCreatedCommandが公開されてどのように見ることができますMasstransitが正しい値を扱っていない

public class TweetCreatedCommand : Command 
{ 
    public readonly string Message; 
    public readonly DateTime Timestamp; 
    public readonly Guid TweetId; 
    public readonly string Who; 

    public TweetCreatedCommand(Guid tweetId, string message, DateTime timeStamp, string who) 
    { 
     TweetId = tweetId; 
     Message = message; 
     Timestamp = timeStamp; 
     Who = who; 
    } 
} 

public ActionResult Index() 
    { 
     TweetCreatedCommand data; 

     Bus.Initialize(sbc => 
     { 
      sbc.UseMsmq(); 
      sbc.VerifyMsmqConfiguration(); 
      sbc.UseMulticastSubscriptionClient(); 
      sbc.ReceiveFrom("msmq://localhost/test_queue"); 
      sbc.Subscribe(subs => 
      { 
       subs.Handler<TweetCreatedCommand>(msg => data = new TweetCreatedCommand(msg.TweetId, msg.Message,msg.Timestamp,msg.Who)); 
      }); 
     }); 

     Bus.Instance.Publish(new TweetCreatedCommand(Guid.NewGuid(),"foo!",DateTime.Now,"CDA")); 

        ViewData.Model = data; 

     return View(); 
    } 

にHomeControllerに次のコードを持つ単純なasp.net-MVCアプリを持っているとのデータがMSMQキューにOKですが、ハンドラがデータを受け取ったとき: TweetCreatedCommand.TweetId:00000000-0000-0000-0000-000000000000そしてそれは別のものでなければならない TweetCreatedCommand.Messageはnullであり、 "foo!" TweetCreatedCommand.TimeStampは01/01/01です 誰がnullで、 "CDA"にする必要があります

何が問題なのですか?

すべてのヘルプは

答えて

1

MassTransitのデフォルトの直列化は、プロパティだけで動作いただければ幸いです。読み取り専用フィールドをプロパティに変更すると、シリアライザはデータを正しく入力します。読み取り専用フィールドが必要な場合は、BinarySerializer(デフォルトはJSON)に変更してください。

+0

ありがとう、今、それは完全に読み取り専用フィールドを変更して動作します – cdiazal

+0

私はUseBinarySerializerを試しても動作していません。パブリッシュ時にTweetCreatedCommandコンストラクタを呼び出しますが、パブリッシュ後にコンストラクタを再度コールしないため、変数データが​​nullになります。 – cdiazal

+0

メーリングリスト(https://groups.google.com/forum/#!forum/masstransit-discuss;私は何らかの理由でBinarySerializerを使用していませんでしたが、私はそれのまわりにいくつかの追加の問題があることを確信しています。さらに、https://github.com/MassTransit/MassTransit/tree/master/src/MassTransit.Tests/Serializationの仕様をチェックして、各シリアライザを実行してください。 – Travis

関連する問題