Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 监视Azure blob存储中容器的更改的最佳方法是什么?_C#_Azure_Azure Storage_Azure Storage Blobs - Fatal编程技术网

C# 监视Azure blob存储中容器的更改的最佳方法是什么?

C# 监视Azure blob存储中容器的更改的最佳方法是什么?,c#,azure,azure-storage,azure-storage-blobs,C#,Azure,Azure Storage,Azure Storage Blobs,我正在寻找监视Azure blob存储中容器/文件夹的更改的最佳方法。到目前为止,我只找到了一种方法,那就是在某个地方运行一个辅助进程,定期ping容器的内容以查找更改 有更好的办法吗?没有更好的办法了,伊姆霍。很抱歉HTHIgor是对的,因为您需要轮询容器。我只是想澄清一些事情。当你说: 在某个地方运行工作进程,定期ping容器的内容以查找更改 辅助进程可以是Web角色或辅助角色、Run()循环等中的线程。它不需要单独的角色。只需确保您的轮询代码可用于多个角色实例(例如,您可能希望以互斥体的形

我正在寻找监视Azure blob存储中容器/文件夹的更改的最佳方法。到目前为止,我只找到了一种方法,那就是在某个地方运行一个辅助进程,定期ping容器的内容以查找更改


有更好的办法吗?

没有更好的办法了,伊姆霍。很抱歉HTH

Igor是对的,因为您需要轮询容器。我只是想澄清一些事情。当你说:

在某个地方运行工作进程,定期ping容器的内容以查找更改


辅助进程可以是Web角色或辅助角色、Run()循环等中的线程。它不需要单独的角色。只需确保您的轮询代码可用于多个角色实例(例如,您可能希望以互斥体的形式执行某种类型的页面blob租约,以确保您仅从一个实例进行轮询)。您也可以通过Azure队列来实现这一点,因为队列消息现在在消息创建时支持不可见超时。

正如其他人所说,在合理的时间间隔内为您的应用程序轮询是可以的。但是您不需要检查内容本身。您可以检查ETag(如果使用纯HTTP),也可以检查您是否使用API。

azure存储分析是否包含所需信息?您仍然需要一些东西来进行轮询。

假设您可以控制更新/更改blob的代码,您可以在blob更改时使用Signal生成推送通知,从而避免重复轮询。

存储SDK不提供此功能,但它是新WebJobs SDK的主要功能。有一个[BlobInput]属性,允许您指定要侦听的容器,它包括一个高效的blob侦听器,当检测到新blob时,该侦听器将分派给该方法。以下是blob监听的一些示例:

下面是一个示例用法:

    public static void CopyWithStream(
        [BlobInput("container/in/{name}")] Stream input,
        [BlobOutput("container/out1/{name}")] Stream output
        )
    {
        Debug.Assert(input.CanRead && !input.CanWrite);
        Debug.Assert(!output.CanRead && output.CanWrite);

        input.CopyTo(output);
    }
blob侦听器位于下面:

        JobHost host = new JobHost(acs); // From nuget: Microsoft.WindowsAzure.Jobs.Host
        host.RunAndBlock();  

旧问题,但我正在研究此主题,发现您现在可以使用Azure事件网格(不要与Azure事件中心混淆)在blob存储发生更改时获得通知:


似乎如果您想要触发器,就必须使用SQL Azure。这里有一个很好的比较:SQLAzure触发器不适用于blob存储容器,SQLAzure也不提供blob和容器的大容量存储功能。好吧,我就是这么想的。BillForney可能是的,但是考虑到容器的大小可能是无限的,以及它的整个分布式特性,做到这一点、良好地扩展和不破坏基础设施并不是一件小事。如果只检查容器的blobProperty.lastModifiedUC字段,您永远不会丢失任何更改,这是否100%安全?是否会有任何问题?例如,如果使用多台机器在blob上存储一个巨大的容器,是否会发生“过去的修改”事件?这是安全的。操作成功完成后,将更新LastModifiedUC。值得一提的是,容器每10分钟扫描一次(!)。因此不会立即触发web作业。