Как программно использовать пользовательский диспетчер подключений служб SQL Server службы Integration Services (SSIS)?

#ssis #visual-studio-2017

Вопрос:

Я пытаюсь программно создать пакет служб SSIS из консольного приложения C#, которое использует сторонний пользовательский менеджер подключений для Кафки, например:

 static void Main(string[] args) 
{ 
    Application app = new Application(); 
    Package pkg = new Package(); 
    ConnectionManager cmKafka = pkg.Connections.Add("KAFKACS"); 
...
 

который терпит неудачу с:

Среда выполнения Microsoft.SQLServer.Dts.Исключение DtsRuntimeException
Тип подключения «KAFKACS», указанный для диспетчера подключений … не распознается как допустимый тип диспетчера подключений.

Однако добавление этого менеджера в проект служб интеграции из Visual Studio 2017 работает просто отлично.

Я новичок в разработке SSIS, C# и Windows. Вот что я пробовал до сих пор:

  • Добавьте ссылки GAC на сборки KAFKACS в мое консольное приложение.
  • Принудительное 64-битное выполнение, которое приводит к Microsoft.SqlServer.DTSRuntimeWrap тому, что оно не найдено.
  • Используйте отражение, чтобы попытаться выяснить, какая архитектура и для чего .Версия NET framework библиотеки DLL Кафки, на которые я ссылаюсь (выглядит как MSIL).
  • Создавайте версии одного и того же приложения, используя предыдущие версии .NET target framework.
  • Попробуйте вручную создать экземпляр менеджера Кафки, как показано здесь:
 var rawKafka = new KafkaConnectionManager(); 
ConnectionManager cmKafka = (???) rawKafka; 
pkg.Connections.Join(cmKafka); 
 
  • Нужно ли мне регистрировать компонент KAFKACS, чтобы вызов Connections.Add прошел успешно?
  • Являются ли сообщения об ошибках вводящими в заблуждение, и я пропускаю другие, возможно, конкретные сборки Кафки, на которые мне нужно ссылаться?
  • Могу ли я вручную создать экземпляр KafkaConnectionManager и использовать его с Connections.Join ?

Комментарии:

1. Какова конечная цель? Чтобы глотать данные, используя Кафку? Я всегда с опаской отношусь к сложным решениям, где простого решения будет достаточно. Почему бы просто не использовать консольное приложение C# для прямого приема данных Кафки? SSIS теперь, на мой взгляд, старая технология.

2. Привет @Ник. McDermaid цель состоит в том, чтобы автоматизировать создание пакетов SSIS в проекте, где SSIS, Кафка, а также пользовательский менеджер уже широко используются для такого рода интеграции.

Ответ №1:

Чтобы ответить на мой вопрос, проблема заключалась в том, что сторонний диспетчер подключений был создан для SQL Server 2017 (v14), но консольное приложение ссылалось на ManagedDTS сборку для 2016 года (v13).

Вызов pkg.Connections.Add("KAFKACS") не смог найти библиотеки DLL, так как сторонний установщик установил их в C:Program Files (x86)Microsoft SQL Server140DTSConnections (где 140 соответствует v14), а не в 130DTSConnections том месте, где v13 ManagedDTS ожидал бы их найти.