第二次下载时下载文件失败

时间:2016-03-29 10:40:59

标签: c# sharepoint csom

我有以下代码使用CSOM从sharepoint站点下载文件:

    public IEnumerable<FileUpload> DownloadFiles(string client, Guid userGuid, IEnumerable<Guid> fileUploadGuids)
    {
        using (var context = new ClientContext(documentStore))
        {
            client = client.ToLower();

            var result = IntialSetUp(client, userGuid, fileUploadGuids, context);

            context.Load(result, items => items.Include(
                item => item.File.Name,
                item => item[FileTitle],
                item => item[FileRef]
            ));

            context.ExecuteQuery();

            List<FileUpload> fileUploads = new List<FileUpload>();

            foreach (var item in result)
            {
                using (var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, item[FileRef].ToString()))
                {
                    using (var memory = new MemoryStream())
                    {
                        fileInfo.Stream.CopyTo(memory);

                        fileUploads.Add(new FileUpload()
                        {
                            Name = item[FileTitle].ToString(),
                            FileUploadGuid = new Guid(item.File.Name),
                            FileBytes = memory.ToArray()
                        });
                    }
                }
            }

            return fileUploads;
        }
    }

    public  void AddNetworkCredentials(ClientContext context)
    {
        string login = ConfigurationManager.AppSettings["UserName"];
        string password = ConfigurationManager.AppSettings["Password"];

        context.Credentials = new NetworkCredential(login, password, ConfigurationManager.AppSettings["Domain"]);

        context.ExecuteQuery();
    }

    public ListItemCollection IntialSetUp(string client, Guid userGuid, IEnumerable<Guid> fileUploadGuids, ClientContext context)
    {
        AddNetworkCredentials(context);

        var list = context.Web.Lists.GetByTitle(client);

        context.ExecuteQuery();

        return GetItems(FileLeafRef, Array.ConvertAll(fileUploadGuids.ToArray(), x => x.ToString("N")), list, FieldType.File, documentStore + "/" + client + "/" + userGuid.ToString("N"));
    }

此代码第一次运行正常,但每个连续的请求都会抛出以下错误:

The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.

这只发生在这个服务请求中,并且不会影响其他不下载实际文件的请求,这使我相信它与OpenBinaryDirect方法有关,但我没有找到任何描述此问题的内容。

关于可能导致这种情况的原因以及如何纠正它的任何想法?

注释:

  • 留在一堆ExecteQuerys中进行测试。
  • 文件的标题实际上是一个guid所以我们可以有多个 具有相同名称的文件(文件名是单独的列)

0 个答案:

没有答案