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

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

看起来我必须调用EndOnDemandTransfer() ,但MSDN不是很清楚。

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

在按需传输完成后,您应该调用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/

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

设置1分钟的传输间隔意味着它将开始并每隔1分钟继续。 一旦获得了所需的数据,只需将其设置回0.恕我直言,比处理OnDemand更容易。

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