gpt4 book ai didi

c# - 无法序列化 Azure ServiceBus 消息 - 从 'ExpiresAtUtc' 获取值时出错

转载 作者:行者123 更新时间:2023-12-02 06:07:08 24 4
gpt4 key购买 nike

我需要编写一个测试,手动创建 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 集合),并且是有意这样设计的。有一个similar question关于测试,如果你真的需要这个,实现它的唯一方法就是使用反射。

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 服务总线团队,因为他们认为这是一种危险的做法,可能最终会出现在您的生产中。

关于c# - 无法序列化 Azure ServiceBus 消息 - 从 'ExpiresAtUtc' 获取值时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47755066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com