3

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

看起来我必须打电话EndOnDemandTransfer(),但MSDN对此不是很清楚。

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

4

2 回答 2

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/

于 2012-05-03T07:16:19.933 回答
0

Sandrino 是正确的,但我会补充另一个观点。理论上,您应该在启动 OnDemand 传输时收到队列通知(如果指定)。但是,我发现设置预定传输更容易。轮询队列并正确调用 EndOnDemandTransfer 有点麻烦。

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

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

于 2012-05-03T16:46:28.087 回答