0

Windows Azure ServiceBus からのメッセージのシリアル化に問題があります。

「message.GetBody();」を呼び出すと メソッドは、私のazure-emulatorがマシンで利用可能なすべてのメモリを割り当てさせるある種のループに陥ります。

私のコード:

            Microsoft.ServiceBus.Messaging.BrokeredMessage message;
            while (true)
            {
                // SB is an instance of a class which let me receive a BrokeredMessage through its ReceiveMessage method.
                message = SB.ReceiveMessage("orders");
                if (message == null)
                {
                    break;
                }


                // This ends up allocating lots of memory until the debugger crashes.
                Procurement.TestOrder torder = message.GetBody<Procurement.TestOrder>();
            }

使用されるクラス:

[MessageContract(IsWrapped=false)]
public class TestOrder
{
    [MessageBodyMember]
    public int companyId { get; set; }
}

また、TestOrder-Class で [DataContract] および [DataMember] 属性を使用してみました。

ところで、メッセージは非常に単純な XML ファイルであり、BizTalk から Azure のキューに入る名前空間はありません。

これにはいくつかの小さな欠陥があるかもしれませんが、シリアライザーがループに陥る理由はわかりません。

前もって感謝します!

4

2 に答える 2

0

簡単なテストを行うには、message.GetBodyの後にThread.Sleep(10)を追加してみてください。ローカルのAzureエミュレーターでも同様の問題が発生しましたが、この簡単なトリックで解決しました。

于 2012-01-03T15:43:10.327 に答える
0

[DataContract]を使用し[DataMember]て逆シリアル化を試みると、どのようなエラーが表示されますか? あなただけの場合はStream s = message.GetBody<Stream>();何がs含まれていますか?

文字列のペイロードが、シリアル化されたバイナリ XML ではなく、テキスト/XML である場合は、おそらく次のように DataContractSerializer を渡す必要があります。

torder = message.GetBody<TestOrder>(new DataContractSerializer(typeof(TestOrder)));
于 2012-01-04T18:18:58.670 に答える