不能使用QueueClient进行调试.控制台应用程序上的OnMessage
本文关键字:应用程序 应用 程序上 OnMessage 控制台 调试 QueueClient 不能 | 更新日期: 2023-09-27 18:01:48
我需要能够调试以下控制台应用程序,以了解消息是否被正确反序列化。
但是,当我在visual studio上按F5时,我可以调试这一行:
string mensaje = message.GetBody();
,但下面的行似乎没有执行,控制台APP关闭,我甚至看不到我写到控制台的消息。我最好的猜测是因为异步调用的性质与OnMessage的东西。但我不确定。
class Program
{
static void Main(string[] args)
{
try
{
string connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");
Console.WriteLine("Press key to continue");
Console.ReadKey();
QueueHelper.ReceiveMessageEmpresa("Empresa", connectionString);
}
catch (Exception ex)
{
throw ex;
}
}
}
public static void ReceiveMessageEmpresa(string queuName, string connectionString)
{
QueueClient Client = QueueClient.CreateFromConnectionString(connectionString, "Empresa");
// Configure the callback options
OnMessageOptions options = new OnMessageOptions();
options.AutoComplete = false;
options.AutoRenewTimeout = TimeSpan.FromMinutes(1);
// Callback to handle received messages
Client.OnMessage((message) =>
{
try
{
string mensaje = message.GetBody<string>();
Empresa empresa = JsonConvert.DeserializeObject<Empresa>(mensaje);
// Process message from queue
//Console.WriteLine("Body: " + );
Console.WriteLine("MessageID: " + message.MessageId);
Console.ReadKey();
// Remove message from queue
message.Complete();
}
catch (Exception ex)
{
// Indicates a problem, unlock message in queue
message.Abandon();
}
}, options);
}
或者我如何重写这个方法来返回对象?或者你有什么建议?
我们今天下午遇到了这个确切的问题,在逐行取出代码后发现这与使用Newtonsoft有关。如果你注释掉你的行:
Empresa empresa = JsonConvert.DeserializeObject<Empresa>(mensaje);
你会发现它是有效的。
我们已经绕过这个包装JsonConvert功能在另一个类,我们从我们的OnMessage方法调用。
我不知道为什么这是不幸的情况,但我希望这有助于!
哇…我也有过这样的问题。
经过几个小时的调试(因为它显然什么都不做),发现了Newtonsoft的潜在问题。JSON与Azure Worker Role的组合。
Newtonsoft Package安装得很好。在我的测试环境中。一切都很正常。当我运行worker时,它只是坐在那里,没有清空队列。
所以…在部署到Azure之前,如果遇到这种情况,请重新安装Nuget包(或使用降级/更新)。如果注释掉SerializeObject或DeserializeObject调用,也可以在本地快速调试此问题。或者将调用移到客户端之外。OnMessage语句,然后你会看到错误
从Client.OnMessage()函数中提取消息处理逻辑到一个单独的方法中最终会抛出一个异常(否则它会静默失败)。我的问题是不同版本的Newtonsoft。我的解决方案项目中安装了Json Nuget包。我不得不将它们全部更新到最新版本(9.0.1),然后问题就解决了。