Llamando al paquete SSIS de forma asíncrona

votos
1

Estoy llamando a un paquete de SSIS usando LoadPackage (...).

¿Es posible hacer que esta llamada sea una llamada asincrónica?

Publicado el 02/01/2009 a las 15:07
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
0

Si solo desea que se ejecute en segundo plano, entonces sí, puede colocar un hilo en spool o llamar a algún T-SQL para crear un trabajo dinámicamente (y luego eliminarlo de nuevo). Si desea ejecutarlo de forma asincrónica y desea una devolución de llamada cuando esté listo, entonces creo que está desafortunado.

Respondida el 02/01/2009 a las 15:18
fuente por usuario

votos
1

Sí, use un delegado asíncrono, como se demuestra aquí:

http://msdn.microsoft.com/en-us/library/h80ttd5f.aspx

Respondida el 02/01/2009 a las 15:25
fuente por usuario

votos
0

¿Estás preguntando si es 1) legal llamar a LoadPackage en un hilo de fondo o 2) es posible? Para el n. ° 1 no puedo dar una respuesta definitiva porque no utilizo el marco SSIS.

Sin embargo, el # 2 (siempre que # 1 sea verdadero) es definitivamente factible. En mi humilde opinión, es mejor que uses un marco existente que tiene API diseñada para llamar a la API asincrónica y esperar los resultados. Por ejemplo, con Parellel Extensions June 08 CTP, el siguiente código servirá.

using System.Threading.Tasks;
...
var future = Future.Create(()=>LoadPackage); // Starts loading the package
// Do other stuff
var package = future.Value;  // Wait for package load to complete and get the value
Respondida el 02/01/2009 a las 15:55
fuente por usuario

votos
0

Llamaré a un paquete de SSIS desde mi UI (WPF) a través de una llamada de servicio asincrónica WCF. El código de servicio es:

public string ImportMarriageXML(bool isWakeUp, bool clearExistingMarriage)
{
    try
    {
        var dts = new Microsoft.SqlServer.Dts.Runtime.Application();

        using (var package = dts.LoadFromSqlServer(
            ServiceSettings.Settings.SSIS.ImportMarriages,
            ServiceSettings.Settings.SSIS.ServerIP,
            ServiceSettings.Settings.SSIS.UserID,
            ServiceSettings.Settings.SSIS.Password,
            null))
        {
            package.InteractiveMode = false;
            package.Connections["DB.STAGING"].ConnectionString = String.Format("{0};Provider={1};", DBSettings.ConnectionString(Core.Database.Staging), ServiceSettings.Settings.SSIS.Provider);

            var variables = package.Variables;
            variables["IsWakeUp"].Value = isWakeUp;
            variables["ClearExistingMarriage"].Value = clearExistingMarriage;
            variables["XmlDirectory"].Value = ServiceSettings.Settings.SSIS.Properties.XmlDirectory;

            if (package.Execute() == DTSExecResult.Failure)
            {
                // HACK: Need to refactor this at some point. Will do for now.
                var errors = new System.Text.StringBuilder();
                foreach (var error in package.Errors)
                    errors.AppendFormat("SubComponent: {0}; Description: {1}{2}", error.SubComponent, error.Description, Environment.NewLine);
                throw new ApplicationException(errors.ToString());
            }

            return package.Connections["Text Logging"].ConnectionString;
        }
    }
}

Y (parte del) código del lado del cliente es el siguiente:

private void InvokeLoadMarriages()
{
    integrationServicesServiceClient.BeginImportMarriageXML(false, OnEndImportMarriageXML, null);
}

private void OnEndImportMarriageXML(IAsyncResult asyncResult)
{
    view.InvokeDisplayResults(integrationServicesServiceClient.EndImportMarriageXML(asyncResult));
}

Donde BeginImportMarriageXML y EndImportMarriageXML son las operaciones asincrónicas generadas en la clase de proxy.

Respondida el 16/11/2009 a las 08:06
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more