我何时在Azure诊断中使用EndOnDemandTransfer()?

时间:2012-05-03 06:51:29

标签: windows azure azure-diagnostics

Azure诊断程序提供了RoleInstanceDiagnosticManager.EndOnDemandTransfer()方法,我不太了解。如果我只是调用BeginOnDemandTransfer(),那么GetActiveTransfers()会一直返回非空集合,而我的代码不知道何时停止等待传输完成。

看起来我必须致电EndOnDemandTransfer(),但MSDN对此并不十分清楚。

何时在Azure诊断中使用EndOnDemandTranfer()

2 个答案:

答案 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