0

Visual Studio で開発された dtsx パッケージに Web サービス タスクがあります。タイムアウトが 30 秒に設定された httpconnection があります。パッケージは、SQL Server (2008 r2) エージェント ジョブのステップとして含まれています。パッケージを展開するときに、SQL Server に格納されるように設定しました。

SQLジョブステップでタイムアウト設定だけを変更できるようにしたいのですが、これを行う方法や可能かどうかさえわかりません。現時点では、VS 内の設定を変更してから、毎回パッケージを再デプロイしています。

これを行う方法について誰か助けてもらえますか?これは、ジョブ ステップのどのタブで設定する必要がありますか?

4

3 に答える 3

1

HTTP 接続マネージャーにはタイムアウト プロパティがありますが、これは Web サービスへの実際の接続を制御するためのものです。意味がある場合、特定のメソッドを呼び出す実際の時間を制御しません。

アドレスをクリーニングするために Web サービスを使用する 2005 年のパッケージがありました。Web サービスは内部でホストされているため、HTTP 接続は LAN の速度であり、問​​題はありませんでした。サービス自体は、1 つのアドレスをかなり迅速に標準化できます。数十万をまとめてクリーンアップする必要がある場合、それにはかなりの時間がかかります。XML タスクには、2008 R2 の時点で、6 分の変更不可能なデフォルト タイムアウトが組み込まれています。3601秒にする必要がある場合、またはタイムアウトしない必要がある場合、これはあまり便利ではありません. それを呼び出すドキュメントを見つけるのに苦労していますが、6分以上スリープするサービスを起動することで動作を確認できます.

Timeout私たちの解決策は、サービス呼び出しのプロパティをオーバーライドできるように、スクリプト タスクを使用して実際のサービス呼び出しを処理することでした。

Public Sub Main()
    Dim url As String
    Dim inboundFile As String
    Dim success As Boolean
    Dim timeoutMs As Integer
    ' 1 hour = 60min * 60 sec * 1000 milliseconds
    timeoutMs = 60 * 60 * 1000

    inboundFile = CStr(Dts.Variables("NetworkShareInput").Value)
    url = CStr(Dts.Variables("WebService").Value)

    Try
        Dim svc As New AddressCleanerService(url)
        ' Explicitly provide a timeout for the web service connection
        svc.Timeout = timeoutMs
        svc.Credentials = System.Net.CredentialCache.DefaultCredentials
        success = svc.CleanBulkAddresses(inboundFile)
    Catch ex As Exception
        Dts.Events.FireError(0, "Address cleaning", "Something failed in the address component stuff", String.Empty, 0)
        Dts.Events.FireError(0, "Address cleaning", ex.ToString(), String.Empty, 0)
    End Try

    If (success) Then
        Dts.TaskResult = ScriptResults.Success
    Else
        Dts.TaskResult = ScriptResults.Failure
    End If
End Sub
于 2013-02-07T15:35:49.870 に答える
0

まず、ソース コードをまだ管理できる場合は、パッケージの構成について説明します。次に、これらの設定を XML ファイルまたはデータ テーブルで編集できます。

そうでない場合は、ジョブ ステップの [値の設定] タブを使用して、いくつかの値をパッケージにプッシュできます。難しいのは、プロパティ パスを正しく取得することです。ここでも、Visual Studio とパッケージ構成機能を使用すると、適切な名前を見つけることができるはずです。

プロパティパスに対してこれを試してください:\Package.Connections[myHttpConnection].Properties[Timeout].Value

于 2013-02-07T15:14:22.257 に答える
0

これを行う 1 つの方法は、式を使用して、SQL エージェント ジョブからタイムアウト値を渡すことです。以下は、大まかな手順です。

タイムアウト値を保持する変数を SSIS パッケージに作成します。HTTP 接続のプロパティ ウィンドウで、式の日食ボタンをクリックします。プロパティ式エディターで [プロパティ] ドロップダウンを展開します。[タイムアウト] を選択します。そして、先ほど作成したタイムアウト変数を使用します。次のようなもの: @[User::Timeout]

SQL エージェントでは、コマンド ラインをジョブ タイプとして使用し、DTEXEC を使用して SSIS パッケージを実行します。

DTEXEC コマンドでは、値を変数に渡すことができます。以下はコマンドの例です: dtexec /f C:\SSIS\Package.dtsx /set \package.variables[Timeout].Value;45

そのため、タイムアウト値を変更する場合は、パッケージを再デプロイするのではなく、SQL エージェント ジョブで単純に変更します。

于 2013-02-07T15:05:07.780 に答える