Azure诊断程序提供了RoleInstanceDiagnosticManager.EndOnDemandTransfer()
方法,我不太了解。如果我只是调用BeginOnDemandTransfer()
,那么GetActiveTransfers()
会一直返回非空集合,而我的代码不知道何时停止等待传输完成。
看起来我必须致电EndOnDemandTransfer()
,但MSDN对此并不十分清楚。
何时在Azure诊断中使用EndOnDemandTranfer()
?
答案 0 :(得分:1)
在按需传输完成后,您应该调用 EndOnDemandTransfer 方法。启动按需转移时,您将 OnDemandTransferOptions 传递给方法:
var options = new OnDemandTransferOptions();
options.NotificationQueueName = "on-demand-notifications";
...
manager.BeginOnDemandTransfer(DataBufferName.Logs, options);
从代码示例中可以看出,您可以在 OnDemandTransferOptions 类上设置 NotificationQueueName 。这是在按需传输完成后将接收消息的队列。您需要监控队列,阅读消息,最后使用您在消息中找到的 RequestId 调用 EndOnDemandTranfer 方法。
这就是这样的消息:
<OnDemandTransfers>
<Logs>
<NotificationQueueName>wad-transfer</NotificationQueueName>
<LevelFilter>Undefined</LevelFilter>
<From>2009-12-10T11:27:15.1376953Z</From>
<To>2009-12-10T11:32:15.1376953Z</To>
<RequestId>7352b663-ba11-413a-8db0-bca889ea84df</RequestId>
</Logs>
</OnDemandTransfers>
在Neil的博客上了解更多相关信息:http://convective.wordpress.com/2009/12/10/diagnostics-management-in-windows-azure/
答案 1 :(得分:0)
桑德里诺是对的,但我会添加另一个观点。理论上,在启动OnDemand传输时,您应该通知队列(如果已指定)。但是,我发现设置预定转移更容易。轮询队列并正确调用EndOnDemandTransfer有点麻烦。
设置1分钟的传输间隔意味着它将开始并每1分钟继续一次。获得所需数据后,只需将其设置为0即可将其关闭。恕我直言,比处理OnDemand更容易。
更多信息: http://dunnry.com/blog/2012/04/16/GettingDiagnosticsDataFromWindowsAzure.aspx