我正努力让我的应用程序能够从我的服务总线接收Asyncronously消息。 但是,有时候一个例外就是抛出,我不知道如何让它消失或者它可以来自它。
以下是例外:
Exception: System.NullReferenceException: Object reference not set to an instance of an object. at GetOffers.DbConnection.processEndReceive(IAsyncResult result);
所以,我知道它来自我的IASync方法,但我无法理解它无法正常工作的地方。
我的QueueClient conf:
QClient = QueueClient.CreateFromConnectionString(connectionString, queueStr,ReceiveMode.ReceiveAndDelete);
这是我的两个IASync方法:
void processEndReceive(IAsyncResult result)
{
try
{
QueueClient qc = result.AsyncState as QueueClient;
BrokeredMessage message = qc.EndReceive(result);
ForexData data = new ForexData();
var newtrade = new Trade(data.OfferId, message.Properties["login"].ToString(), message.Properties["amount"].ToString(), message.Properties["instr"].ToString(), message.Properties["type"].ToString(), data.CreationDate, message.Properties["mode"].ToString(), message.Properties["accountID"].ToString(), message.Properties["idTrade"].ToString());
//Static Variable for the WHERE (sql) in ResponseListener Line 215.
idtradetemp = message.Properties["idTrade"].ToString();
Console.WriteLine("Received message " + message.Label);
if (newtrade != null)
{
try
{
newtrades.Add(newtrade);
}
catch
{
Console.WriteLine("Une erreur est survenue lors l'ajout du message dans la liste 'newtrades'");
}
Console.WriteLine("Received Delete: " + DateTime.Now);
}
}
catch (Exception e)
{
Console.WriteLine(string.Format("Exception: {0}", e.ToString()));
TextWriter tw = new StreamWriter("logServiceBus.txt", true);
tw.WriteLine("Program terminated on " + DateTime.Now);
tw.WriteLine("------------------------------------");
tw.WriteLine(string.Format("Exception: {0}", e.ToString()));
tw.WriteLine("------------------------------------");
tw.Close();
}
}
void processEndComplete(IAsyncResult result)
{
try
{
BrokeredMessage m = result.AsyncState as BrokeredMessage;
m.EndComplete(result);
Console.WriteLine("Completed message " + m.Label);
}
catch
{
}
}
Basicaly这些方法每次在ServiceBus中检测到新消息时都是Trigger。问题是,我放了一个Console.WriteLine(“新消息”);当检测到新消息时,此CW将触发2次(或更多)。
所以两件事之一: 什么可能导致我的错误?并且我如何使我的IAsync方法只在触发此消息时触发。
答案 0 :(得分:1)
使用Begin / End对可能很难正确编程。您是否尝试更新代码以使用async / await模式?已发布服务的Service Bus库以及服务器上的Service Bus 1.1也支持基于任务的API。有关详细信息,请参阅http://www.windows-azure.net/task-based-apis-for-service-bus/(我是该帖子的作者)。然后,您可以使用ReceiveAsync。您可能还想查看也可以使用的OnMessage API。 (文档在这里:http://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.queueclient.onmessage.aspx)