簡體   English   中英

無法序列化Azure ServiceBus消息-從“ ExpiresAtUtc”獲取價值時出錯

[英]Unable to serialize Azure ServiceBus Message - Error getting value from 'ExpiresAtUtc'

我需要編寫一個測試,在其中手動創建Microsoft.Azure.ServiceBus.Message並將其序列化為JSON。 示例代碼:

    var message = new Microsoft.Azure.ServiceBus.Message
    {
        MessageId = "0c8dfad9-6f0f-4d7f-a248-2a48fc899486",
        CorrelationId = "78b507b0-6266-458d-afe6-7882c935e481",
        Body = Encoding.UTF8.GetBytes("Hello world"),
    };

    var json = JsonConvert.SerializeObject(message);

但是,序列化時出現以下異常:

    Newtonsoft.Json.JsonSerializationException : 
Error getting value from 'ExpiresAtUtc' on 'Microsoft.Azure.ServiceBus.Message'.
    ---- System.InvalidOperationException : Operation is not valid due to the current state of the object.

有什么想法可以創建有效的消息(以后可以序列化)嗎? ExpiresAtUtc僅獲取,因此無法直接設置。 有沒有辦法間接設置它?

ExpiresAtUtc由代理設置,被認為是內部的( SystemProperties集合),並以此方式進行了有意設計。 關於測試存在一個類似的問題 ,如果您真的需要它,唯一的方法是使用反射。

var message = new Message();
//message.TimeToLive = TimeSpan.FromSeconds(10);
var systemProperties = new Message.SystemPropertiesCollection();

// systemProperties.EnqueuedTimeUtc = DateTime.UtcNow.AddMinutes(1);
var bindings = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetProperty;
var value = DateTime.UtcNow.AddMinutes(1);
systemProperties.GetType().InvokeMember("EnqueuedTimeUtc", bindings, Type.DefaultBinder, systemProperties, new object[] { value});
// workaround "ThrowIfNotReceived" by setting "SequenceNumber" value
systemProperties.GetType().InvokeMember("SequenceNumber", bindings, Type.DefaultBinder, systemProperties, new object[] { 1 });

// message.systemProperties = systemProperties;
bindings = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.SetProperty;
message.GetType().InvokeMember("SystemProperties", bindings,Type.DefaultBinder, message, new object[] { systemProperties });

請注意 ,這種方法並非來自Azure Service Bus團隊,因為他們認為這是一種危險的實踐,最終可能會在您的生產中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM