Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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_Asp.net Web Api_Azure Storage Blobs_Azure Caching - Fatal编程技术网

C# Azure blob存储-分块文件上载-跨回发缓存数据

C# Azure blob存储-分块文件上载-跨回发缓存数据,c#,azure,asp.net-web-api,azure-storage-blobs,azure-caching,C#,Azure,Asp.net Web Api,Azure Storage Blobs,Azure Caching,我一直在关注如何将大文件从MVC web应用程序分块上传到Azure blob存储 在本例中,第一个控制器操作创建一个blob引用,并在会话中存储一些元数据: var fileToUpload = new CloudFile() { BlockCount = blocksCount, FileName = fileName, Size = fileSize, Block

我一直在关注如何将大文件从MVC web应用程序分块上传到Azure blob存储

在本例中,第一个控制器操作创建一个blob引用,并在会话中存储一些元数据:

        var fileToUpload = new CloudFile()
        {
            BlockCount = blocksCount,
            FileName = fileName,
            Size = fileSize,
            BlockBlob = container.GetBlockBlobReference(fileName),
            StartTime = DateTime.Now,
            IsUploadCompleted = false,
            UploadStatusMessage = string.Empty
        };
        Session.Add("CurrentFile", fileToUpload);
要允许每次连续呼叫从中断的位置开始,请执行以下操作:

 CloudFile model = (CloudFile)Session["CurrentFile"];
 model.BlockBlob.PutBlock(*new chunk stream*);
很明显,在教程中这样做是为了方便,但我不清楚应该如何做。对于可伸缩的云应用程序,我根本不想使用会话

我的问题是,在每次数据块上传时简单地提交并重写到blob存储是不是很好,如果不是,是否有适合Azure应用程序的缓存替代方案


如果它影响到答案,我想从javascript调用WebAPI控制器,这样就没有会话了。

您有几个选项。第一种方法是继续使用会话对象和(请参阅下文)。第二种方法是为您提供诸如Redis之类的服务。在这两种情况下,最重要的是

对于第一个选项,有几个:

  • 内存会话状态提供程序-Defualt,但正如您所提到的,它的扩展性不好
  • Sql Server会话状态提供程序-这将对性能产生影响,因为它将往返于Sql数据库
  • 分布式内存会话状态提供程序,如Redis Cache会话状态提供程序-这是当前推荐的使用会话状态的解决方案
使用Redis会话状态提供程序 您可以继续使用会话对象,并在Web.Config中将会话提供程序切换为使用Redis,而不是在内存中。首先添加,然后更新web.config:

<sessionStatemode="Custom" customProvider="MySessionStateStore">
<providers>
<!--Remove old session state info if currently configured.-->
<add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="<redis host url/ip here>" accessKey="<your access key here>" />
</providers>


对于这两种情况,我们都有大量的信息。

完全绕过MVC层,从浏览器直接将文件上传到blob存储中,这是一种可以接受的解决方案吗?这是针对最终用户上传文件的网站,所以我恐怕不是。