Udostępnij za pośrednictwem


Loading and Running a Remote Package Programmatically

Aby uruchomić zdalnego pakietów z komputera lokalnego, który nie ma Integration Services pakiety instalacji jest uruchamiany, tak aby są uruchamiane na komputerze zdalnym, na którym Integration Services został zainstalowany. Aby to zrobić, mających za pomocą komputera lokalnego SQL Server Agent, usługa sieci Web lub składnik zdalny do uruchomienia pakietów na komputerze zdalnym. Podczas próby uruchomienia pakietów zdalnego bezpośrednio z komputera lokalnego, pakiety będzie ładować na, a następnie spróbuj uruchamiane na komputerze lokalnym.Jeśli nie ma na komputerze lokalnym Integration Services zainstalowany, pakiety nie będzie działać.

Uwaga

You cannot run packages outside BI Development Studio on a client computer that does not have Integration Services installed, and the terms of your SQL Server licensing might not let you install Integration Services on additional computers.Integration Services is a server component and is not redistributable to client computers.

Alternatywnie można uruchomić zdalnego pakiet z lokalnego komputera, na którym jest Integration Services zainstalowane. Aby uzyskać więcej informacji zobaczŁadowanie i programowo uruchomiony pakiet lokalny.

Uruchamianie zdalne pakiet na komputerze zdalnym

Jak wspomniano wyżej, istnieją różne sposoby, w którym można uruchomić zdalnego pakiet na serwerze zdalnym:

  • Uruchom pakiet zdalnego programowo za pomocą agenta programu SQL Server

  • Uruchom pakiet zdalnego programowo za pomocą usługa sieci Web lub zdalne składnika

Prawie wszystkie metody, które są używane w tym temacie, ładować i zapisywać pakietów wymaga odwołania do Microsoft.SqlServer.ManagedDTS wirtualny plik dziennika. Wyjątkiem jest podejście ADO.NET wykazać, w tym temacie wykonywania sp_start_job procedura przechowywana, który wymaga nawiązania System.Data. Po dodaniu odwołania do Microsoft.SqlServer.ManagedDTS wirtualny plik dziennika w nowy projekt importu Microsoft.SqlServer.Dts.Runtime obszar nazw z using lub Imports Instrukcja.

Programowe uruchomić pakiet zdalny na serwerze przy użyciu agenta serwera SQL

Poniższy przykład kodu demonstruje sposób programowo za pomocą SQL Server Agent do uruchomienia pakiet zdalnego na serwerze. Przykładowy kod wywołuje systemowa procedura składowana, sp_start_job, który uruchamia SQL Server zadanie agenta. Nosi nazwę zadania, która uruchamia procedurę RunSSISPackage, a jest to zadanie na komputerze zdalnym. The RunSSISPackage zadanie then runs the pakiet on the remote computer.

Uwaga

Wartość zwracana przez sp_start_job przechowywane procedury wskazuje, czy procedura przechowywana była w stanie uruchomić SQL Server Agent zadanie pomyślnie. Wartości zwracanej nie wskazuje, czy pakiet zakończyło się powodzeniem, czy nie.

Aby uzyskać informacje dotyczące rozwiązywania problemów z pakietami, które są uruchamiane z SQL Server zadanie agenta, zobacz artykuł firmy Microsoft Nie można uruchomić pakiet SSIS podczas wywoływania pakiet SSIS z krokiem zadanie agenta programu SQL Server.

Przykładowy kod

Imports System.Data
Imports System.Data.SqlClient

Module Module1

  Sub Main()

    Dim jobConnection As SqlConnection
    Dim jobCommand As SqlCommand
    Dim jobReturnValue As SqlParameter
    Dim jobParameter As SqlParameter
    Dim jobResult As Integer

    jobConnection = New SqlConnection("Data Source=(local);Initial Catalog=msdb;Integrated Security=SSPI")
    jobCommand = New SqlCommand("sp_start_job", jobConnection)
    jobCommand.CommandType = CommandType.StoredProcedure

    jobReturnValue = New SqlParameter("@RETURN_VALUE", SqlDbType.Int)
    jobReturnValue.Direction = ParameterDirection.ReturnValue
    jobCommand.Parameters.Add(jobReturnValue)

    jobParameter = New SqlParameter("@job_name", SqlDbType.VarChar)
    jobParameter.Direction = ParameterDirection.Input
    jobCommand.Parameters.Add(jobParameter)
    jobParameter.Value = "RunSSISPackage"

    jobConnection.Open()
    jobCommand.ExecuteNonQuery()
    jobResult = DirectCast(jobCommand.Parameters("@RETURN_VALUE").Value, Integer)
    jobConnection.Close()

    Select Case jobResult
      Case 0
        Console.WriteLine("SQL Server Agent job, RunSISSPackage, started successfully.")
      Case Else
        Console.WriteLine("SQL Server Agent job, RunSISSPackage, failed to start.")
    End Select
    Console.Read()

  End Sub

End Module
using System;
using System.Data;
using System.Data.SqlClient;

namespace LaunchSSISPackageAgent_CS
{
  class Program
  {
    static void Main(string[] args)
    {
      SqlConnection jobConnection;
      SqlCommand jobCommand;
      SqlParameter jobReturnValue;
      SqlParameter jobParameter;
      int jobResult;

      jobConnection = new SqlConnection("Data Source=(local);Initial Catalog=msdb;Integrated Security=SSPI");
      jobCommand = new SqlCommand("sp_start_job", jobConnection);
      jobCommand.CommandType = CommandType.StoredProcedure;

      jobReturnValue = new SqlParameter("@RETURN_VALUE", SqlDbType.Int);
      jobReturnValue.Direction = ParameterDirection.ReturnValue;
      jobCommand.Parameters.Add(jobReturnValue);

      jobParameter = new SqlParameter("@job_name", SqlDbType.VarChar);
      jobParameter.Direction = ParameterDirection.Input;
      jobCommand.Parameters.Add(jobParameter);
      jobParameter.Value = "RunSSISPackage";

      jobConnection.Open();
      jobCommand.ExecuteNonQuery();
      jobResult = (Int32)jobCommand.Parameters["@RETURN_VALUE"].Value;
      jobConnection.Close();

      switch (jobResult)
      {
        case 0:
          Console.WriteLine("SQL Server Agent job, RunSISSPackage, started successfully.");
          break;
        default:
          Console.WriteLine("SQL Server Agent job, RunSISSPackage, failed to start.");
          break;
      }
      Console.Read();
    }
  }
}

Powrót do początku

Uruchamianie zdalne pakiet programowo za pomocą usługa sieci Web lub zdalne składnika

Wcześniejsze rozwiązanie dla uruchamiania pakietów programowego na serwerze nie wymaga żadnych niestandardowego kodu na serwerze.Niemniej jednak możesz to rozwiązanie, które nie zależy od agenta programu SQL Server wykonać pakietów.W poniższym przykładzie pokazano, usługa sieci Web, które mogą być tworzone na serwerze, aby rozpocząć Integration Services pakiety lokalnie, a aplikacja test, która może służyć do wywoływania usługa sieci Web z klient komputera. Jeśli użytkownik nie chce utworzyć składnik zdalnego zamiast usługa sieci Web, można użyć tej samej logiki kodu z bardzo małą liczbę zmian w składnik zdalny.Jednak składnik zdalny może wymagać konfiguracja szerszy niż usługa sieci Web.

Important noteImportant Note:

O ustawieniach domyślnych, w celu uwierzytelnienia i autoryzacja usługa sieci Web na ogół nie ma wystarczających uprawnień dostępu do programu SQL Server lub systemu plików do ładowania i wykonać pakietów.Być może trzeba przypisać odpowiednie uprawnienia do usługa sieci Web, konfigurując jego ustawienia uwierzytelnianie i autoryzacja w plik Web.config pliku i przypisywania uprawnień systemu bazy danych i plik odpowiednio.Szczegółowe omówienie sieci Web, bazy danych i uprawnienia systemu plików wykracza poza zakres tego tematu.

Important noteImportant Note:

Metody ApplicationKlasa do pracy z magazynu pakiet SSIS obsługuje tylko ".", localhost lub serwer nazw dla serwera lokalnego. Nie można użyć "(local)".

Przykładowy kod

Następujące przykłady pokazują, jak tworzenie i testowanie usługa sieci Web.

Tworzenie usługa sieci Web

An Integration Services pakiet can be loaded directly from a file, directly from SQL Server, or from the SSIS pakiet Store, which manages pakiet storage in both SQL Server and special file system folders. W tym przykładzie obsługuje wszystkie dostępne opcje, korzystając z Select Case lub switch konstrukcja, aby wybrać odpowiednią składnię do uruchomienia pakiet i aby złączyć argumenty wejściowe odpowiednio. metoda usługa sieci LaunchPackage Web zwraca wynik uruchomienia pakiet jako liczba całkowita zamiast DTSExecResult wartość tak, aby klient komputerów nie jest wymagane odwołanie do dowolnej Integration Services zespoły.

Aby utworzyć usługa programowo uruchomienie pakietów na serwerze sieci Web

  1. Otwórz program Visual Studio i utworzyć projekt usługa sieci Web w preferowanym języku programowania.Kod przykładowy używa nazwy LaunchSSISPackageService dla projektu.

  2. Dodaj odwołanie do Microsoft.SqlServer.ManagedDTS i dodać Imports lub using Instrukcja w pliku kod Microsoft.SqlServer.dts.Runtime obszar nazw.

  3. Wklej przykładowy kod dla metoda usługa sieci LaunchPackage Web do klasy.(Próbki zawiera całą zawartość okna Kod).

  4. Tworzenie i testowanie usługa sieci Web przez zapewnienie to zbiór wartości prawidłowe argumenty wejściowe metoda LaunchPackage wskazujące na istniejący pakiet.Na przykład jeśli package1.dtsx jest przechowywany na serwerze w pakietach c:\Moje, jako wartość sourceType, "c:\Moje pakiety" jako wartość sourceLocation i "package1" (bez rozszerzenia) jako wartość packageName należy przekazać "plik".

Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports Microsoft.SqlServer.Dts.Runtime
Imports System.IO

<WebService(Namespace:="http://dtsue/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class LaunchSSISPackageService
  Inherits System.Web.Services.WebService

  ' LaunchPackage Method Parameters:
  ' 1. sourceType: file, sql, dts
  ' 2. sourceLocation: file system folder, (none), logical folder
  ' 3. packageName: for file system, ".dtsx" extension is appended

  <WebMethod()> _
  Public Function LaunchPackage( _
    ByVal sourceType As String, _
    ByVal sourceLocation As String, _
    ByVal packageName As String) As Integer 'DTSExecResult

    Dim packagePath As String
    Dim myPackage As Package
    Dim integrationServices As New Application

    ' Combine path and file name.
    packagePath = Path.Combine(sourceLocation, packageName)

    Select Case sourceType
      Case "file"
        ' Package is stored as a file.
        ' Add extension if not present.
        If String.IsNullOrEmpty(Path.GetExtension(packagePath)) Then
          packagePath = String.Concat(packagePath, ".dtsx")
        End If
        If File.Exists(packagePath) Then
          myPackage = integrationServices.LoadPackage(packagePath, Nothing)
        Else
          Throw New ApplicationException( _
            "Invalid file location: " & packagePath)
        End If
      Case "sql"
        ' Package is stored in MSDB.
        ' Combine logical path and package name.
        If integrationServices.ExistsOnSqlServer(packagePath, ".", String.Empty, String.Empty) Then
          myPackage = integrationServices.LoadFromSqlServer( _
            packageName, "(local)", String.Empty, String.Empty, Nothing)
        Else
          Throw New ApplicationException( _
            "Invalid package name or location: " & packagePath)
        End If
      Case "dts"
        ' Package is managed by SSIS Package Store.
        ' Default logical paths are File System and MSDB.
        If integrationServices.ExistsOnDtsServer(packagePath, ".") Then
          myPackage = integrationServices.LoadFromDtsServer(packagePath, "localhost", Nothing)
        Else
          Throw New ApplicationException( _
            "Invalid package name or location: " & packagePath)
        End If
      Case Else
        Throw New ApplicationException( _
          "Invalid sourceType argument: valid values are 'file', 'sql', and 'dts'.")
    End Select

    Return myPackage.Execute()

  End Function

End Class
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using Microsoft.SqlServer.Dts.Runtime;
using System.IO;

[WebService(Namespace = "http://dtsue/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class LaunchSSISPackageServiceCS : System.Web.Services.WebService
{
  public LaunchSSISPackageServiceCS()
  {
    }

  // LaunchPackage Method Parameters:
  // 1. sourceType: file, sql, dts
  // 2. sourceLocation: file system folder, (none), logical folder
  // 3. packageName: for file system, ".dtsx" extension is appended

  [WebMethod]
  public int LaunchPackage(string sourceType, string sourceLocation, string packageName)
  { 

    string packagePath;
    Package myPackage;
    Application integrationServices = new Application();

    // Combine path and file name.
    packagePath = Path.Combine(sourceLocation, packageName);

    switch(sourceType)
    {
      case "file":
        // Package is stored as a file.
        // Add extension if not present.
        if (String.IsNullOrEmpty(Path.GetExtension(packagePath)))
        {
          packagePath = String.Concat(packagePath, ".dtsx");
        }
        if (File.Exists(packagePath))
        {
          myPackage = integrationServices.LoadPackage(packagePath, null);
        }
        else
        {
          throw new ApplicationException("Invalid file location: "+packagePath);
        }
        break;
      case "sql":
        // Package is stored in MSDB.
        // Combine logical path and package name.
        if (integrationServices.ExistsOnSqlServer(packagePath, ".", String.Empty, String.Empty))
        {
          myPackage = integrationServices.LoadFromSqlServer(packageName, "(local)", String.Empty, String.Empty, null);
        }
        else
        {
          throw new ApplicationException("Invalid package name or location: "+packagePath);
        }
        break;
      case "dts":
        // Package is managed by SSIS Package Store.
        // Default logical paths are File System and MSDB.
        if (integrationServices.ExistsOnDtsServer(packagePath, "."))
        {
          myPackage = integrationServices.LoadFromDtsServer(packagePath, "localhost", null);
        }
        else
        {
          throw new ApplicationException("Invalid package name or location: "+packagePath);
        }
        break;
      default:
        throw new ApplicationException("Invalid sourceType argument: valid values are 'file', 'sql', and 'dts'.");
    }

    return (Int32)myPackage.Execute();

  }

}

Testowanie usługa sieci Web

Uruchomienie pakiet następującej przykładowej aplikacji konsoli korzystają z usługa sieci Web.Metoda LaunchPackage usługa sieci Web zwraca wynik uruchomienia pakiet jako liczba całkowita zamiast DTSExecResult wartość tak, aby komputery klienckie nie wymagają odwołania do wszelkich Integration Services zespoły. Próbka tworzy prywatnych wyliczenia którego dublowanie wartości DTSExecResult wartości, które mają raportować wyniki jego działania.

Aby utworzyć aplikację konsoli do testowania usługa sieci Web

  1. W programie Visual Studio dodać nową aplikację konsoli przy użyciu preferowany język programowania, aby samo rozwiązanie, zawierający projekt usługa sieci Web.Kod przykładowy używa nazwy LaunchSSISPackageTest dla projektu.

  2. zestaw nowej aplikacji konsoli jako projekt uruchamiania w rozwiązania.

  3. Dodaj odwołanie sieci Web dla projektu usługa sieci Web.Jeśli to konieczne, Dostosuj deklaracja zmiennej w przykładowy kod dla nazwy, przypisane do obiektu serwera proxy usługa sieci Web.

  4. Wklej przykładowy kod do procedury głównej i prywatne wyliczenia w kodzie.(Próbki zawiera całą zawartość okna Kod).

  5. Edytuj wiersz kodu wywołuje metoda LaunchPackage w celu zapewnienia zestaw prawidłowe wartości wejściowe argumentów wskaż istniejący pakiet.Na przykład jeśli package1.dtsx jest przechowywany na serwerze w pakietach c:\Moje, przekazać "plik" jako wartość sourceType, "C:\Moje pakiety" jako wartość sourceLocation, a „ package1"(bez rozszerzenia) jako wartość packageName.

Module LaunchSSISPackageTest

  Sub Main()

    Dim launchPackageService As New LaunchSSISPackageService.LaunchSSISPackageService
    Dim packageResult As Integer

    Try
      packageResult = launchPackageService.LaunchPackage("sql", String.Empty, "SimpleTestPackage")
    Catch ex As Exception
      ' The type of exception returned by a Web service is:
      '  System.Web.Services.Protocols.SoapException
      Console.WriteLine("The following exception occurred: " & ex.Message)
    End Try

    Console.WriteLine(CType(packageResult, PackageExecutionResult).ToString)
    Console.ReadKey()

  End Sub

  Private Enum PackageExecutionResult
    PackageSucceeded
    PackageFailed
    PackageCompleted
    PackageWasCancelled
  End Enum

End Module
using System;

namespace LaunchSSISPackageSvcTestCS
{
  class Program
  {
    static void Main(string[] args)
    {
      LaunchSSISPackageServiceCS.LaunchSSISPackageServiceCS launchPackageService = new LaunchSSISPackageServiceCS.LaunchSSISPackageServiceCS();
      int packageResult = 0;

      try
      {
        packageResult = launchPackageService.LaunchPackage("sql", String.Empty, "SimpleTestPackage");
      }
      catch (Exception ex)
      {
        // The type of exception returned by a Web service is:
        //  System.Web.Services.Protocols.SoapException
        Console.WriteLine("The following exception occurred: " + ex.Message);
      }

      Console.WriteLine(((PackageExecutionResult)packageResult).ToString());
      Console.ReadKey();

    }

    private enum PackageExecutionResult
    {
      PackageSucceeded,
      PackageFailed,
      PackageCompleted,
      PackageWasCancelled
    };

  }
}

Powrót do początku

Integration Services icon (small) Konfiguracja w aktualizacji z usług integracja Services pobytu

Najnowsze pliki do pobrania, artykuły, próbki, i pliki wideo firmy Microsoft, jak również wybranego rozwiązania od Wspólnoty, odwiedź witrynę Integration Services strona w witrynie MSDN lub TechNet:

Automatycznego powiadomienie tych aktualizacji należy subskrybować źródła danych RSS, które jest dostępne strona.