によってスローされた例外によって引き起こされるタイムアウトは、続行する]をクリックし、ボタンを無期限に待機しているパッケージにつながるUIの相互作用を作成することができます。
SSISは、この問題が "interactive mode"で実行されているかどうかを判断してこの問題を修正しようとします。これはHadiの答えと似ていますが、BIDS/SSDT/Visual Studio以外のSSISパッケージを単独で実行するだけでは、インタラクティブモードフラグを設定しないようにするには不十分です。
非対話モードで実行されているSSISパッケージからUIを操作しようとすると、コードから例外がスローされます。
私は、タスクへの読み取り専用変数として::私が参考にパターンがシステムを追加することです見つけ、スクリプトタスクにInteractiveMode変数をメッセージボックスを追加し、私が見つけ、次の
bool interactiveMode = (bool) Dts.Variables["System::InteractiveMode"].Value;
if (interactiveMode)
{
// UI code here
MessageBox.Show("Something happened");
}
を使用していた場合上記のコードは、同じコードを実稼働環境にデプロイし、デスクトップ上で実行することができます。「デバッグ用シムを削除するためにすべてを動かして1秒間実行する」というコードを修正します。
私は怠け者でありたいと思っていないので、UI要素が悪いフォームを使用していることがわかります彼らが言うことをスクリーンショットまたは書き留めなければなりません。代わりに、パッケージにDts.Events.FireInformation
イベントを使用してください。たとえば、この汎用コードは、(私がreadonlyまたはreadwriteとしてチェックした)すべての変数とその値を列挙します。私はパッケージを実行すると
public void Main()
{
bool fireAgain = false;
string message = "{0}::{1} : {2}";
foreach (var item in Dts.Variables)
{
Dts.Events.FireInformation(0, "SCR Echo Back", string.Format(message, item.Namespace, item.Name, item.Value), string.Empty, 0, ref fireAgain);
}
Dts.TaskResult = (int)ScriptResults.Success;
}
さて、私のVisual Studioで出力タブ(私はそれをすべてを選択することができる場所)+グラフィカルな結果]タブには、これらの情報メッセージのすべてを持っています。パッケージを実行すると、2005/2008または2012+のパッケージ展開モデルを使用している場合、エラー、情報、および警告イベントをジョブログまたはコンソールなどに取り込むために、引数が/rep eiw
であることを確認する必要がありますデフォルトではエラーのみが報告されます)。 2012年以降のプロジェクト展開モデルでは、自動的に情報をSSISDB.catalog.operation_messagesテーブルに取得します。
メッセージボックスを表示すると、メッセージボックスが閉じられるまで実行が一時停止すると思われます。 – Tanner
MessageBox.Showが遅くなり、サーバー上でタイムアウトが発生するとは思わない。コードサンプルを投稿して、わかりやすくなりましたか?また、私は偶然の可能性を除外するためにあなたのテストを数回繰り返すことを提案します:) –
またはMessageBoxはタイムアウトの限界に達するまでスクリプトを保留しましたか? – LONG