-
-
Notifications
You must be signed in to change notification settings - Fork 968
Closed
Description
This is very similar to #369
I am using 2024.1.0 version of the library and connecting to an Azure Storage SFTP server. I am trying to upload 50 files in parallel using the same connection and it throws this exception
System.InvalidOperationException: The session is not open.
at Renci.SshNet.SubsystemSession.EnsureSessionIsOpen()
at Renci.SshNet.Sftp.SftpSession.SendRequest(SftpRequest request)
at Renci.SshNet.Sftp.SftpSession.RequestWrite(Byte[] handle, UInt64 serverOffset, Byte[] data, Int32 offset, Int32 length, AutoResetEvent wait, Action`1 writeCompleted)
at Renci.SshNet.SftpClient.InternalUploadFile(Stream input, String path, Flags flags, SftpUploadAsyncResult asyncResult, Action`1 uploadCallback)
at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Boolean canOverride, Action`1 uploadCallback)
at FunctionApp1.Function1.<>c__DisplayClass2_2.<UploadFiles>b__1() in E:\src\SFtp-Function\FunctionApp1\Function1.cs:line 62
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at FunctionApp1.Function1.<>c__DisplayClass2_1.<<UploadFiles>b__0>d.MoveNext() in E:\src\SFtp-Function\FunctionApp1\Function1.cs:line 62
--- End of stack trace from previous location ---
at FunctionApp1.Function1.UploadFiles() in E:\src\SFtp-Function\FunctionApp1\Function1.cs:line 68
My code looks like this:
static async Task UploadFiles()
{
var bytes = File.ReadAllBytes("E:\\src\\ConsoleApp\\ConsoleApp1\\6 MB");
int degreeOfParallelism = 50;
var options = new ParallelOptions();
options.MaxDegreeOfParallelism = degreeOfParallelism;
try
{
using (var client = new SftpClient(_connectionInfo))
{
client.KeepAliveInterval = TimeSpan.FromMinutes(30);
client.OperationTimeout = TimeSpan.FromMinutes(2);
client.ConnectionInfo.MaxSessions = 100;
client.Connect();
var tasks = Enumerable.Range(1, 50).AsParallel().WithDegreeOfParallelism(degreeOfParallelism).Select(async i =>
{
Console.WriteLine($"Uploading file {i}");
await Task.Run(() => client.UploadFile(new MemoryStream(bytes), $"upload/6MB_{i}", true));
Console.WriteLine($"Upload file {i} completed");
return;
});
await Task.WhenAll(tasks);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}I tried the smilar scenario with the WINSCP library as well to rule out any issues with server and seems to be working fine there
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels