2017-04-12 23 views
2

私たちのサーバにSQL Server Agentscript taskの予定のSSISパッケージがあります。 SQL接続のためにtimeoutを設定しましたが、Tryブロック内のコードの一部では、エラーがスローされ、Catchブロック内にMessageBox.Showが存在します。コードをそのまま残すとジョブは失敗しますが、テスト目的のためにMessageBox.ShowをコメントアウトしてCatchブロックを空白のままにすると、ジョブは正常に実行されました。MessageBox.Showがサーバー側でタイムアウトの問題を引き起こしますか?

MessageBox.Showは、サーバー側の接続でtimeoutに影響するか、エラーメッセージの表示を無効にした後でこの異なる結果が生じるのは誰も知っていますか?それは視覚的なスタジオSSDT外で実行される場合は、事前:)

+2

メッセージボックスを表示すると、メッセージボックスが閉じられるまで実行が一時停止すると思われます。 – Tanner

+0

MessageBox.Showが遅くなり、サーバー上でタイムアウトが発生するとは思わない。コードサンプルを投稿して、わかりやすくなりましたか?また、私は偶然の可能性を除外するためにあなたのテストを数回繰り返すことを提案します:) –

+0

またはMessageBoxはタイムアウトの限界に達するまでスクリプトを保留しましたか? – LONG

答えて

6

によってスローされた例外によって引き起こされるタイムアウトは、続行する]をクリックし、ボタンを無期限に待機しているパッケージにつながる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テーブルに取得します。

+0

あなたの詳細な答えに感謝し、それを消化する必要がありますxD – LONG

1

Messagebox.show

おかげで例外がスローされます。あなたがそれを削除するとcatchブロックは空になりますので、urスクリプトは例外を無視します(空のcatchブロック=エラー処理なし、無視するだけです)。

try.. catchブロックを削除した場合、例外が表示され、メッセージが表示されます。

多分DTSでMessagebox.show

+0

Thx Hadi、または「Messagebox.Show」がタイムアウトに達するまでタスクを保留してからエラーをスローすることを理解できますか? – LONG

+0

そうだと思います。しかし、 'Messagebox.show()'がスローされるという例外は、ssisがグラフィカルコンポーネントを表示できないということです。実際のものではありません – Hadi

+0

答えをアップアップしました、ハディ – LONG

関連する問題