【问题标题】:Deploying custom SSIS connection manager failing with '...is not recognized as a valid connection manager type'部署自定义 SSIS 连接管理器失败,并显示“...未被识别为有效的连接管理器类型”
【发布时间】:2019-10-25 21:50:00
【问题描述】:

我制作了一个自定义 SSIS 连接管理器 (.NET 4.6.2):

namespace HelloWorldCm
{
    using Microsoft.SqlServer.Dts.Runtime;

    [DtsConnection(
        ConnectionType = "HELLOWORLD",
        DisplayName = "Hello World Connection Manager",
        Description = "Connection manager for Hello World")]
    public class HelloWorldConnectionManager : ConnectionManagerBase
    {
        public override DTSExecResult Validate(IDTSInfoEvents infoEvents)
        {
            return DTSExecResult.Success;
        }
    }
}

我引用Microsoft.SQLServer.ManagedDTS 版本14.0.0.0,据我了解是SQL Server 2017。在本地,如果我在GAC 中注册并复制到我的/Connections 文件夹,我可以在Visual Studio 中使用SSIS,并且将连接管理器添加到我的DTSX

我可以保存/构建等,它工作正常 - 因此我将连接管理器和 DTSX 复制到运行 SQL Server 2017 的 VM。我再次在 GAC 中注册并复制到 /Connections 文件夹。

然后我将Import Packages... 输入我的Integration Services Catalogs,选择DTSX 并按下一步。然后这告诉我:

一个或多个选定的包尚未准备好。

当我看看为什么我会看到时:

为连接管理器“Hello World Connection Manager”指定的连接类型“HELLOWORLD”未被识别为有效的连接管理器类型。尝试为未知连接类型创建连接管理器时返回此错误。检查连接类型名称中的拼写。

我已经尝试让它工作了很长一段时间,所以我将列出我尝试过的内容:

  1. 尝试了“任何 CPU”版本
  2. 尝试了“x86”版本
  3. 尝试了“x64”版本
  4. 用虚拟任务也试过 DTSX
  5. 重新启动服务器(在任何部署之后)

我相信其他人。我还做的是创建一个自定义任务,它只是将“Hello World”打印到日志中,它被编译为“任何 CPU”,以相同的方式部署(到相同的位置)并且 SSIS 似乎没有找到它并接受 DTSX 有任何问题。所以我有理由相信“任何 CPU”应该足够好。

我现在不知道该去哪里 - 据我所知,我有正确的引用、正确的 .NET 版本,并且部署与任务相同。

我已经把dtsx 放在下面,以防里面有东西:

<?xml version="1.0"?>
<DTS:Executable xmlns:DTS="www.microsoft.com/SqlServer/Dts"
  DTS:refId="Package"
  DTS:CreationDate="6/11/2019 1:09:07 PM"
  DTS:CreationName="Microsoft.Package"
  DTS:CreatorComputerName="CHRIS"
  DTS:CreatorName="CHRIS\cskar"
  DTS:DTSID="{0F2D59A1-461B-46ED-8765-75484C06253C}"
  DTS:ExecutableType="Microsoft.Package"
  DTS:LastModifiedProductVersion="15.0.1100.123"
  DTS:LocaleID="2057"
  DTS:ObjectName="Package1"
  DTS:PackageType="5"
  DTS:VersionBuild="1"
  DTS:VersionGUID="{E688A11B-234E-4F39-991E-BAA0A37642E6}">
  <DTS:Property
    DTS:Name="PackageFormatVersion">8</DTS:Property>
  <DTS:ConnectionManagers>
    <DTS:ConnectionManager
      DTS:refId="Package.ConnectionManagers[Hello World Connection Manager]"
      DTS:CreationName="HELLOWORLD"
      DTS:DTSID="{9E82E067-2A0A-4C9C-931D-FD59FD159B5C}"
      DTS:ObjectName="Hello World Connection Manager">
      <DTS:ObjectData>
        <InnerObject>
          <TargetServerVersion
            Type="3"
            Value="150" />
        </InnerObject>
      </DTS:ObjectData>
    </DTS:ConnectionManager>
  </DTS:ConnectionManagers>
  <DTS:Variables />
  <DTS:Executables />
  <DTS:DesignTimeProperties><![CDATA[<?xml version="1.0"?>
<Objects Version="8">
</Objects>]]></DTS:DesignTimeProperties>
</DTS:Executable>

【问题讨论】:

  • 这是在项目部署模型还是包部署模型?
  • 错误,包部署模型 - 我正在将 .dtsx 文件复制到服务器,然后导入包(或尝试),尽管我可能正在导入项目...
  • 目录用于存储项目。所以你会想要导入一个 .ispac 文件。您必须连接到集成服务(而不是数据库引擎)并将您的包导入 MSDB。
  • 啊,好的,所以我现在已经将它纳入项目 - 谢谢 - 请随时添加以上内容作为答案 - 但由于我不熟悉 SSIS - 为什么不包的导入不工作吗?如,为什么会出现错误 - 当它运行包时...?

标签: c# ssis dts ssis-connection-manager


【解决方案1】:

SSIS 目录旨在存储项目,而不是独立的包。这是 2012 年的一项新功能,有助于将相关软件包保持在一起。您可以参数化项目并在包之间共享连接管理器。如果您希望部署到目录,则需要导入“.ispac”文件,或者您可以在 Visual Studio 中右键单击并按“部署”。

在项目部署模型中,单个“.dtsx”包不能被视为独立的。由于上述新功能,它仅作为项目的一部分才有意义。

将独立包部署到 MSDB 是旧模型并得到维护,因此我们不必立即将所有包迁移到目录中。

Deploy Integration Services (SSIS) Projects and Packages

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多