Suporte multiplataforma em seus componentes personalizados

Aplica-se a:SQL Server SSIS Integration Runtime no Azure Data Factory

Agora você pode usar o Designer SSIS no SSDT (SQL Server Data Tools) para criar, manter e executar pacotes destinados ao SQL Server 2016, SQL Server 2014 ou SQL Server 2012. Para obter o SSDT para Visual Studio 2015, consulte Baixar o SQL Server Data Tools mais recente.

No Gerenciador de Soluções, clique com o botão direito do mouse em um projeto do Integration Services e selecione Propriedades para abrir as páginas de propriedades do projeto. Na guia Geral de Propriedades de Configuração, selecione a propriedade TargetServerVersion e escolha o SQL Server 2016, SQL Server 2014 ou SQL Server 2012.

Propriedade TargetServerVersion na caixa de diálogo de propriedades do projeto

Suporte a múltiplas versões e multiplataforma para componentes personalizados

Todos os cinco tipos de extensões personalizadas do SSIS dão suporte multiplataforma.

  • Gerenciadores de conexões
  • Tarefas
  • Enumeradores
  • Provedores de logs
  • Componentes de fluxo de dados

Para extensões gerenciadas, o Designer SSIS carrega a versão da extensão para a versão de destino especificada. Por exemplo:

  • Quando a versão de destino for SQL Server 2012, o designer carregará a versão de 2012 da extensão.
  • Quando a versão de destino for SQL Server 2016, o designer carregará a versão de 2016 da extensão.

Extensões COM não dão suporte multiplataforma. O Designer SSIS sempre carrega a extensão COM para versão atual do SQL Server, independentemente da versão de destino especificada.

Adicionar suporte básico para várias versões e multiplataforma

Para obter diretrizes básicas, consulte Obter extensões personalizadas do SSIS a receberem suporte a várias versões do SSDT 2015 para SQL Server 2016. Esta postagem de blog descreve as etapas ou requisitos a seguir.

  • Implante os assemblies nas pastas apropriadas.

  • Criar um arquivo de mapa de extensão para o SQL Server 2014 e versões superiores.

Adicionar código para alternar entre versões

Alternar entre versões em uma tarefa, enumerador, provedor de logs ou gerenciador de conexões personalizado

Para uma tarefa, enumerador, provedor de logs ou gerenciador de conexões personalizado, adicione lógica de downgrade no método SaveToXML.

public void SaveToXML(XmlDocument doc, IDTSInfoEvents events)
{
    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
    }

    if (TargetServerVersion == DTSTargetServerVersion.SQLServer2012)
    {
         // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
    }
}

Alternar entre versões em um componente de fluxo de dados personalizado

Para uma tarefa, enumerador, provedor de logs ou gerenciador de conexões personalizado, adicione lógica de downgrade no novo método PerformDowngrade.

public override void PerformDowngrade(int pipelineVersion, DTSTargetServerVersion targetServerVersion)
{
    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2014)
    {
        // Add logic to downgrade from SQL Server 2016 to SQL Server 2014.
        ComponentMetaData.Version = 8;
    }

    if (targetServerVersion == DTSTargetServerVersion.DTSTSV_SQLSERVER2012)
    {
          // Add logic to downgrade from SQL Server 2016 to SQL Server 2012.
        ComponentMetaData.Version = 6;
    }
}

Erros comuns

InvalidCastException

Mensagem de erro. Não é possível converter o objeto COM do tipo 'System.__ComObject para o tipo de interface 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'. Esta operação falhou porque a chamada de QueryInterface no componente COM para a interface com IID '{BE8C48A3-155B-4810-BA5C-BDF68A659E9E}' falhou devido ao seguinte erro: não há suporte para essa interface (exceção de HRESULT: 0x80004002 (E_NOINTERFACE)). (Microsoft.SqlServer.DTSPipelineWrap).

Solução. Se a extensão personalizada fizer referência a assemblies de interoperabilidade do SSIS, como Microsoft.SqlServer.DTSPipelineWrap ou Microsoft.SqlServer.DTSRuntimeWrap, defina o valor da propriedade Embed Interop Types como False.

Embed Interop Types

Não é possível carregar alguns tipos quando a versão de destino é o SQL Server 2012

Esse problema afeta determinados tipos como IErrorReportingService ou IUserPromptService.

Mensagem de erro (exemplo). Não foi possível carregar o tipo 'Microsoft.DataWarehouse.Design.IErrorReportingService' do assembly 'Microsoft.DataWarehouse, Version=13.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'.

Solução alternativa. Use uma MessageBox em vez dessas interfaces quando a versão de destino é o SQL Server 2012.