我有以下代码使用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方法有关,但我没有找到任何描述此问题的内容。
关于可能导致这种情况的原因以及如何纠正它的任何想法?
注释: