2016-05-04 49 views
0

クラウドサービスから一部のデータをエクスポートするためのコンソールアプリケーションとコンパニオンクラスライブラリを作成しました。 SQL Server Integration Servicesは、アプリケーションが正常に機能しているかどうかを判断するためにアプリケーションから返された終了コードに依存するアプリケーションを呼び出します。.NETコンソールアプリケーションからの予期しない終了コード

.NETの未処理例外の汎用エラーコードである終了コード-532462766(0xE0434352)をアプリケーションが断続的に返します。なぜこれが起こっているのか、私はまったく不満です。

アプリケーションによって生成されたログファイルには問題はなく、すべて正常に完了したように見えます。

アプリケーションイベントビューアのログにはエントリがありません。私もアプリケーションを実行し、SSISに沿って、それを渡す前に終了コードをログに記録するバッチファイルを書いた

AppDomain.CurrentDomain.UnhandledException += UnhandledErrorHandler; 
... 
private void UnhandledErrorHandler(object sender, UnhandledExceptionEventArgs e) { 
    logWriter.Write(e.ExceptionObject.ToString(), logLevel.Fatal); 
    logWriter.Write("Exiting now...", logLevel.Fatal); 
    Dispose(); 
} 

アプリケーションであっても処理されない例外ハンドラを持っています。 SSISが受け取っている終了コードは、アプリケーションによって返されるように見えるものです。しかし、私はどこでも起こっている未処理の例外を見ることができません。

コンソールアプリケーションはそうのようなMain()を定義することにより、終了コードを返します。

class Program { 
    static int Main(string[] args) { 

    ... 

    return (Success) ? 0 : 1; 
} 

それは(とデータ抽出は、時間のカップルを取ることができます)断続的であるため、私はVisual Studioの中でそれを実行することはできませんそれをデバッグします。私はアプリケーションがこのような長い時間実行されるという事実に関連しているかもしれないという疑いがありますが、私はそれを確認することはできません。

.NETアプリケーションでその終了コードが返される原因は他にありますか?トラブルシューティングで何か不足していますか?

+0

[この](http://stackoverflow.com/questions/14711633/my-c-sharp-application-is-returning-0xe0434352-to-windows-task-scheduler-but-it)回答はあなたを助けることができます。問題の原因を特定するためにコードの一部をコメントにすることは可能ですか?あなたはまた、より多くの情報を得るためにPBファイルを展開しましたか?あなたはすでにメモリの問題を排除しましたか? –

+0

ありがとうございましたJeroenしかし、私はその質問を見て、残念ながら私はすでに未処理の例外ハンドラがあり、アプリケーションイベントビューアのログにエントリがないので、助けになりませんでした。私はPDBファイルを配備しようとし、それが私に追加の情報を与えるかどうかを見ます。 –

答えて

2

クイックチェック:try catchブロック内にコード全体をラップし、例外をログファイルに保存します。

static int Main(string[] args) 
{ 
    try 
    { 

      //your existing code.... 

    } 
    catch(Exception Ex) 
    { 
     //write your log results here. 

    } 
} 
+0

内部の例外をログすることを忘れないでください –

0

複数のアプリドメインを使用しているかどうかを確認してください。 AppDomain Bで例外Xがスローされ、AppDomain Aに渡すことができなかったときにこの同じ問題が発生しました。これは、シリアル化できないためです。参照best practices for exceptions(「アプリケーションドメインにまたがって」を検索):

ユーザー定義の例外を作成するときに、例外の メタデータは、例外時に含め、リモートで を実行しているコードに利用可能であることを確認する必要がありますアプリドメイン全体で発生します。 の例では、App Domain Aが、例外をスローするコード を実行するApp Domain Bを作成するとします。 App Domain Aが適切にキャッチし、 が例外を処理するためには、 に例外がスローされているアセンブリを見つけることができる必要があります。 のアセンブリに含まれる例外ベースであるが、アプリケーションドメインAのアプリケーションベースの下では、アプリケーションドメインAは は例外を見つけることができず、共通言語ランタイム はFileNotFoundException例外をスローします。この状況を回避するには、 あなたは 二つの方法で例外情報を含むアセンブリ展開することができます:

  • を 両方のアプリドメインによって共有される共通のアプリケーションベースにアセンブリを入れてください。

または

  • ドメインは、共通のアプリケーションベースを共有していない場合は、厳密な名前 で例外情報を含むアセンブリに署名し、グローバルアセンブリキャッシュにアセンブリを展開します。
  • たぶん
+0

情報をありがとう!それは非常に便利です。 StackOverflowで推奨されている手順をリンクしたページから関連する見積もりを追加しました。リンクが変更され、ページが削除されて、ここで情報のコピーを保存しようとします。もちろん、ソースへのリンクと帰属を提供しています。それは便利な発見です。 –

+0

編集ありがとう! –

関連する問題