Задача сценария SSIS WinSCP C # выполняется, но ничего не делает

Мой код не выдает ошибок, но он вообще ничего не делает.

Я пытаюсь подключиться к серверу SFTP, сама задача не показывает никаких ошибок, но не получает доступ / не получает файл, хранящийся в определенном каталоге.

Изображения:

Изображение

Изображение

введите описание изображения здесь

Это мой код:

#region Namespaces
using System;
using Microsoft.SqlServer.Dts.Tasks;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.Linq;
using WinSCP;
#endregion

namespace ST_t5fbgt5564cf3a165da70892d8c435v
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public int Main()
        {
            try
            { 
            SessionOptions sessionOptions = new SessionOptions
            {
                Protocol = Protocol.Sftp,
                HostName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                UserName = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                Password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                PortNumber = xx
            };

            using (Session session = new Session())
            {
                session.Open(sessionOptions);

                const string remotePath = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
                const string localPath = @"C:\xxxxxxxxxxxxxxxxxxxxxxxxxxxx";

                RemoteDirectoryInfo directoryInfo = session.ListDirectory(remotePath);

                RemoteFileInfo latest =
                    directoryInfo.Files
                        .Where(file => !file.IsDirectory)
                        .OrderByDescending(file => file.LastWriteTime)
                        .FirstOrDefault();

                if (latest == null)
                {
                    throw new Exception("No found");
                }

                session.GetFiles(
                    RemotePath.EscapeFileMask(latest.FullName), localPath).Check();
            }
                return 0;
        }
            catch (Exception e)
            {
                Console.WriteLine("Error: (0)", e);
                return 1;

            }
            }


        #region ScriptResults declaration
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

    }
}

Что-то не так с моим кодом? я что-то упускаю?


РЕДАКТИРОВАТЬ:

введите описание изображения здесь


РЕДАКТИРОВАТЬ # 2

Мне удалось распечатать сообщения журнала, и это ошибка:

Error: Error: WinSCP.SessionLocalException: The version of C:\Program Files (x86)\WinSCP\winscp.exe (5.15.3.0) does not match version of this assembly C:\Windows\Microsoft.Net\assembly\GAC_MSIL\WinSCPnet\v4.0_1.7.2.11087__2271ec4a3c56d0bf\WinSCPnet.dll (5.17.10.0).
   in WinSCP.ExeSessionProcess.CheckVersion(String exePath, FileVersionInfo assemblyVersion)
   in WinSCP.ExeSessionProcess..ctor(Session session, Boolean useXmlLog, String additionalArguments)
   in WinSCP.Session.Open(SessionOptions sessionOptions)
   in ST_2u7fsdf8fdsfkjgd998fsdf9ss.ScriptMain.Main()

person programming_amazing    schedule 05.04.2021    source источник


Ответы (2)


Фактический ответ на ваш вопрос: сделайте запись!

См. пример WinSCP SSIS:

  • Часто используйте Dts.Events.FireInformation .

  • Поместите _2 _ / _ 3_ вокруг всего кода и запишите все исключения:

    try
    {
        // The code
    }
    catch (Exception e)
    {
        Dts.Events.FireError(
            0, null, $"Error when using WinSCP to upload files: {e}", null, 0);
    }
    
person Martin Prikryl    schedule 10.04.2021

Я смог решить эту проблему, загрузив правильную версию приложения.

Спасибо всем!

person programming_amazing    schedule 10.04.2021