无法在控制台应用程序上使用 QueueClient.OnMessage 进行调试
Cant debug Using QueueClient.OnMessage on a console app
我需要能够调试以下控制台应用程序以了解消息是否正确反序列化。
但是,当我在 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);
}
或者如何将此方法重写为 return 对象?或者你有什么建议?
我们今天下午 运行 解决了这个确切的问题,在逐行取出代码后发现它与使用 Newtonsoft 有关。如果您注释掉您的行:
Empresa empresa = JsonConvert.DeserializeObject<Empresa>(mensaje);
您应该会发现它有效。
我们通过将 JsonConvert 功能包装在我们从 OnMessage 方法调用的另一个 class 中来解决这个问题。
不幸的是,我不知道为什么会这样,但我希望这对您有所帮助!
哇...我也遇到过这个问题。
尝试调试它的时间(因为它什么都不做)并发现 Newtonsoft.JSON 与 Azure Worker Role 结合的潜在问题。
Newtonsoft 软件包安装正常。在我的测试环境中。一切正常。我一运行工人,它就坐在那里没有清空队列。
所以...在部署到 Azure 之前,如果您遇到这种情况,请再次重新安装 Nuget 包(或使用 downgrade/update)。如果注释掉 SerializeObject 或 DeserializeObject 调用,您还可以在本地快速调试此问题。或者将调用移到 Client.OnMessage 语句之外,然后您将看到错误。
从 Client.OnMessage() 函数中将消息处理逻辑提取到一个单独的方法中,最终引发了异常(否则它会静默失败)。
我的问题是 Newtonsoft.Json Nuget 包的不同版本安装在我的解决方案的项目中。
我不得不将它们全部更新到最新版本 (9.0.1),问题已解决。
我需要能够调试以下控制台应用程序以了解消息是否正确反序列化。
但是,当我在 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);
}
或者如何将此方法重写为 return 对象?或者你有什么建议?
我们今天下午 运行 解决了这个确切的问题,在逐行取出代码后发现它与使用 Newtonsoft 有关。如果您注释掉您的行:
Empresa empresa = JsonConvert.DeserializeObject<Empresa>(mensaje);
您应该会发现它有效。
我们通过将 JsonConvert 功能包装在我们从 OnMessage 方法调用的另一个 class 中来解决这个问题。
不幸的是,我不知道为什么会这样,但我希望这对您有所帮助!
哇...我也遇到过这个问题。
尝试调试它的时间(因为它什么都不做)并发现 Newtonsoft.JSON 与 Azure Worker Role 结合的潜在问题。
Newtonsoft 软件包安装正常。在我的测试环境中。一切正常。我一运行工人,它就坐在那里没有清空队列。
所以...在部署到 Azure 之前,如果您遇到这种情况,请再次重新安装 Nuget 包(或使用 downgrade/update)。如果注释掉 SerializeObject 或 DeserializeObject 调用,您还可以在本地快速调试此问题。或者将调用移到 Client.OnMessage 语句之外,然后您将看到错误。
从 Client.OnMessage() 函数中将消息处理逻辑提取到一个单独的方法中,最终引发了异常(否则它会静默失败)。 我的问题是 Newtonsoft.Json Nuget 包的不同版本安装在我的解决方案的项目中。 我不得不将它们全部更新到最新版本 (9.0.1),问题已解决。