1

グローバル WinSCP セッションを作成しようとしています。アプリケーションの と の 2 つの異なる場所でセッションを使用する必要がGetFilesありPutFilesます。私の問題は、セッションを作成するのに時間がかかりすぎて、アプリケーションの速度が本当に低下することです。グローバルセッションを作成するために以下のものを試しましたが、実行するとセッションが破棄されます例外が発生します。ある場所でセッションを開き、アプリケーションのどこでも使用できますか?

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    Session GlobalSession;

    private static Session OpenSession()
    {
        SessionOptions sessionOptions = new SessionOptions
        {
            Protocol = Protocol.Sftp,

            HostName = @"server",
            UserName = "name",
            PortNumber = 22,
            SshHostKeyFingerprint = "ssh-rsa 2048 RSAKEY",
        };

        using (Session session = new Session())
        {
            // Connect
            session.Open(sessionOptions);
            return session;
        }
    }

    public MainWindow()
    {
        Session LocalSession = OpenSession();
        GlobalSession = LocalSession;
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        string path = "";
        try
        {
            // Upload files
            TransferOptions transferOptions = new TransferOptions();
            transferOptions.TransferMode = TransferMode.Binary;

            TransferOperationResult transferResult;

            RemoteDirectoryInfo subDirs = GlobalSession.ListDirectory(path);

            foreach(var sub in subDirs.Files)
            {
                MessageBox.Show(sub.ToString());
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: {0}", ex);
        }
    }

    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        try
        {
            // Upload files
            TransferOptions transferOptions = new TransferOptions();
            transferOptions.TransferMode = TransferMode.Binary;

            TransferOperationResult transferResult;
            transferResult = GlobalSession.GetFiles(@"d:\toupload\*", "/home/user/File", false, transferOptions);

            // Throw on any error
            transferResult.Check();

            // Print results
            foreach (TransferEventArgs transfer in transferResult.Transfers)
            {
                Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: {0}", ex);
        }
    }
}
4

2 に答える 2