2012-05-03 22 views
3

Azure诊断提供了RoleInstanceDiagnosticManager.EndOnDemandTransfer()方法,我不太明白。如果我只是拨打BeginOnDemandTransfer(),那么GetActiveTransfers()会一直返回非空集合,我的代码不知道何时停止等待传输完成。什么时候在Azure诊断中使用EndOnDemandTransfer()?

看起来我不得不打电话给EndOnDemandTransfer(),但MSDN对此并不十分清楚。

什么时候在Azure诊断中使用EndOnDemandTranfer()

回答

1

在按需转移完成后,您应该调用EndOnDemandTransfer方法。当开始按需传输,您通过OnDemandTransferOptions的方法:

var options = new OnDemandTransferOptions(); 
options.NotificationQueueName = "on-demand-notifications"; 
... 

manager.BeginOnDemandTransfer(DataBufferName.Logs, options); 

正如你可以从代码示例中看到的,您可以设置NotificationQueueNameOnDemandTransferOptions类。这是一旦按需传输完成就会收到消息的队列。您需要监视队列,阅读消息,最后在消息中找到EndOnDemandTranfer方法和RequestId

这是此类信息的模样:

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

了解更多关于这对尼尔的博客:http://convective.wordpress.com/2009/12/10/diagnostics-management-in-windows-azure/

0

Sandrino是正确的,但我会添加另一个角度。在开始OnDemand传输时,理论上应该通知队列(如果指定)。但是,我发现设置预定转移更容易。轮询队列并正确调用EndOnDemandTransfer有点麻烦。

设置1分钟的传输间隔表示它将启动并每隔1分钟继续一次。一旦获得了所需的数据,只需将其设置为0即可将其关闭。恕我直言,比处理OnDemand更容易。

更多信息: http://dunnry.com/blog/2012/04/16/GettingDiagnosticsDataFromWindowsAzure.aspx

+0

我怎么知道我已经“得到我所需要的数据”?我一直认为这只是一个持续的过程,可以获得任何过程输出的缓冲转储,因此它一直持续到角色停止。 – sharptooth

+0

您在OnDemand案件中有同样的问题。如果你知道你想要的时间范围,那么很好,否则你需要不断地拉动,直到你看到你要找的东西。请记住,计划传输将所有缓冲数据从盒子中取出,而不仅仅是一个特定的时间范围。 – dunnry

+0

是的,我知道所有数据都被推入存储。我的目标是将所有缓冲数据推送到存储中,以便前一次推送和离开RoleEntryPoint.OnStop()的代码之间的数据不会丢失。那么我该怎么做?无论我为预定转移指定的那段时间,我仍有可能丢失一些最新数据,并且数据可能包含某些可帮助调试某些关机问题的内容。 – sharptooth