/// <summary> /// Запустить пример работы с методов GetPackage() /// </summary> /// <param name="adapter"> /// Адаптер службы WSL /// </param> /// <param name="personCode"> /// Депозитарный код /// </param> /// <param name="args"> /// Аргументы операции /// </param> private static void RunGetPackage(WslAdapter adapter, string personCode, string[] args) { // Ожидаемые агрументы операции: // 1. Номер пакета // 2. Путь к файлу пакета (опционально) // Если путь к файлу пакета не указан, то пакет сохраняется в текущую директорию в файл с именем вида // "НОМЕР_ПАКЕТА.package" if (args.Length < 1) { throw new CommandLineException("Недостаточно параметров для операции GetPackage"); } // Номер пакета int id; if (!int.TryParse(args[0], out id)) { throw new CommandLineException(string.Format("Неверный номер пакета - \"{0}\"", args[0])); } // Путь к файлу пакета var packageFileName = args.Length > 1 ? args[1] : Path.Combine(Directory.GetCurrentDirectory(), string.Format("{0}.package", id)); // Загрузка содержимого пакета Console.WriteLine("Загрузка пакета \"{0}\"", id); var content = adapter.GetPackage(personCode, id, 1, 1); File.WriteAllBytes(packageFileName, content); Console.WriteLine("Записано {0} байт в файл \"{1}\"", content.Length, packageFileName); }
/// <summary> /// Инициализировать адаптер службы WSL /// </summary> /// <param name="endpoint"> /// Контур службы (PL или PROD) /// </param> /// <param name="vcert"> /// Криптопровайдер /// </param> /// <param name="certificate"> /// Клиентский сертификат /// </param> /// <returns> /// Адаптер службы WSL /// </returns> private WslAdapter CreateAdapter(WslEndpoint endpoint, IVcertAPI vcert, X509Certificate2 certificate) { Console.WriteLine("Инициализация адаптера службы"); var uri = ResolveWslUri(endpoint); var adapter = new WslAdapter(uri, vcert, certificate); return(adapter); }
/// <summary> /// Запустить пример /// </summary> /// <param name="adapter"> /// Адаптер службы WSL /// </param> /// <param name="personCode"> /// Депозитарный код /// </param> /// <param name="operation"> /// Код операции /// </param> /// <param name="args"> /// Аргументы операции /// </param> private static void Run(WslAdapter adapter, string personCode, WslOperation operation, string[] args) { switch (operation) { case WslOperation.PutPackage: RunPutPackage(adapter, personCode, args); break; case WslOperation.GetPackageList: RunGetPackageList(adapter, personCode, args); break; case WslOperation.GetPackage: RunGetPackage(adapter, personCode, args); break; default: throw new CommandLineException(string.Format("Неизвестная операция - \"{0}\"", operation)); } }
/// <summary> /// Запустить пример работы с методов PutPackage() /// </summary> /// <param name="adapter"> /// Адаптер службы WSL /// </param> /// <param name="personCode"> /// Депозитарный код /// </param> /// <param name="args"> /// Аргументы операции /// </param> private static void RunPutPackage(WslAdapter adapter, string personCode, string[] args) { // Ожидаемые агрументы операции: // 1. Имя пакета // 2. Путь к файлу пакета // Ожидается, что имя пакета сформировано в соответствии с правилами ЭДО НРД. if (args.Length < 2) { throw new CommandLineException("Недостаточно параметров для операции PutPackage"); } // Имя пакета var packageName = args[0]; // Путь к файлу пакета var packageFileName = args[1]; if (!File.Exists(packageFileName)) { throw new Exception(string.Format("Файл не найден - \"{0}\"", packageFileName)); } var packageContent = File.ReadAllBytes(packageFileName); // Шаг 1. Инициализация процесса передачи пакета. Пакету присваивается уникальный номер. Console.WriteLine("Инициализация передачи пакета \"{0}\"", packageName); var packageId = adapter.InitTransferIn(personCode, packageName); Console.WriteLine("Получен код пакета: \"{0}\"", packageId); // Шаг 2. Передача содержимого пакета. // Таких операций может быть несколько, если пакет состоит из нескольких блоков. adapter.PutPackage(personCode, packageId, 1, 1, packageContent); Console.WriteLine("Передано: {0} байт", packageContent.Length); // Шаг 3. Завершение передачи пакета. var result = adapter.GetTransferResult(personCode, packageId); Console.WriteLine("Результат передачи: \"{0}\"", result); }
/// <summary> /// Инициализировать адаптер службы WSL /// </summary> /// <param name="endpoint"> /// Контур службы (PL или PROD) /// </param> /// <param name="vcert"> /// Криптопровайдер /// </param> /// <param name="certificate"> /// Клиентский сертификат /// </param> /// <returns> /// Адаптер службы WSL /// </returns> private WslAdapter CreateAdapter(WslEndpoint endpoint, IVcertAPI vcert, X509Certificate2 certificate) { Console.WriteLine("Инициализация адаптера службы"); var uri = ResolveWslUri(endpoint); var adapter = new WslAdapter(uri, vcert, certificate); return adapter; }
/// <summary> /// Запустить пример работы с методов GetPackageList() /// </summary> /// <param name="adapter"> /// Адаптер службы WSL /// </param> /// <param name="personCode"> /// Депозитарный код /// </param> /// <param name="args"> /// Аргументы операции /// </param> private static void RunGetPackageList(WslAdapter adapter, string personCode, string[] args) { // Ожидаемые агрументы операции: // 1. Дата для выгрузки списка входящих пакетов (в формате YYYYMMDD) if (args.Length < 1) { throw new CommandLineException("Недостаточно параметров для операции GetPackageList"); } // Дата для выгрузки списка входящих пакетов DateTime date; if (!DateTime.TryParseExact(args[0], "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) { throw new CommandLineException(string.Format("Неверный формат даты: \"{0}\". Ожидалась дата в формате YYYYMMDD", args[0])); } // Загрузка XML со списком пакетов Console.WriteLine("Запрос списка пакетов..."); var xml = adapter.GetPackageList(personCode, date); var xmlDocument = XDocument.Parse(xml); // XML имеет следующую структуру: // <?xml version="1.0" encoding="windows-1251"?> // <package_list> // <package> // <id>НОМЕР ПАКЕТА</id> // <name>ИМЯ ФАЙЛА ПАКЕТА</name> // <size>РАЗМЕР ПАКЕТА В БАЙТАХ</size> // <hash>ХЕШ ПАКЕТА</hash> // </package> // // <package> ... </package> // ... // </package_list> // ReSharper disable PossibleNullReferenceException var packages = ( from n in xmlDocument.Element("package_list").Elements("package") select new { Id = n.Element("id").Value, Name = n.Element("name").Value, Size = n.Element("size").Value, Hash = n.Element("hash").Value } ).ToArray(); // ReSharper restore PossibleNullReferenceException Console.WriteLine(); Console.WriteLine("Входящие пакеты за {0:d MMMM yyyy}", date); const string format = " {0,-16}| {1,-16}| {2,-16}| {3,-16}"; Console.WriteLine( format, "Номер", "Название", "Размер", "Хеш"); foreach (var package in packages) { Console.WriteLine( format, package.Id, package.Name, package.Size, package.Hash); } Console.WriteLine("----"); Console.WriteLine("Всего {0} пакетов", packages.Length); }