2016-08-24 13 views
0

顧客用のネイティブWindows 10クライアントLOBアプリケーションを開発します。
環境:Windows 10 Pro(モバイルクライアント/タブレットおよび開発者ボックス上)、アップデート3を適用したVisual Studio 2015 Professional、インストールされているすべてのアップデートおよびパッチ。クライアントアプリケーションは最新の「Windows 8 UniversalおよびWindows 10ユニバーサルプラットフォーム用IBM MobileFirst SDK」を使用しています。バージョン8.0.2016070716MobileFirst 8.0未処理例外のネイティブWindows 10クライアントアプリケーションエラー

アプリケーションは、アプリケーションがオンラインでMobileFirst 8.0サーバーに到達すると非常にうまく動作します。 サーバーにアクセスできない場合(オフライン、MFPサーバーが停止した場合)、クライアントアプリケーションのアプリケーションクラッシュが発生しています。 MobileFirst C#クライアントライブラリ内から起動されたワーカースレッドが例外をスローしたようです。この例外は私のコードでは無視できません。ここで

は、問題を示すためにいくつかのコードです:

private async Task<WorklightAccessToken> ConnectMobileFirst() 
{ 
    try 
    { 
     IWorklightClient _client = WorklightClient.CreateInstance(); 
     WorklightAuthorizationManager _wlauthManager = 
         _client.AuthorizationManager; 
     WorklightAccessToken temp1 = await 
         _wlauthManager.ObtainAccessToken(""); 
     return temp1; 
    } 
    catch (Exception exception) 
    { 
     Debug.WriteLine("Exception occured " + exception.Message); 
     return null; 
    } 
} 

は、新しい空白のアプリを作成し、OnLaunchedのEventHandlerから上記の関数を呼び出します。

AccessToken = await ConnectMobileFirst(); 
if (AccessToken != null) 
{ 
    Debug.WriteLine(AccessToken.IsValidToken 
     ? "Connection OK, AccessToken is valid" 
     : "AccesToken NOT valid"); 
} 

MobileFirstサーバーにアクセスできる場合は、すべてが正常に動作し、AccessToken.IsValidTokenがtrueである場合。

MobileFirstサーバがオフラインである場合、次の問題が発生した:

  • 機能ConnectMobileFirst()終了とAccessTokenオブジェクトが返される(例外は、メソッド内で発生していない)
  • AccessToken.IsValidTokenがある(偽でありますMobileFirstサーバーはオフラインです)。
  • プログラムがDebug.WriteLineステートメントを実行する前に、そして時には後で、別のスレッドがNullReferenceExceptionにヒットすることがあります。この「他の」ワーカー・スレッドは、IBMMobileFirstPlatformFoundationWin10.dll内のObtainAccessToken()コール内のどこかで開始されました。 mscorlib.ni.dll WinRTの情報に 'System.Runtime.InteropServices.COMException':スロー

例外:Visual Studioで[出力]ウィンドウには、次の情報が含まれていSerververbindung konnte NICHT hergestelltのwerdenダイ。スロー

例外: mscorlib.ni.dll WinRTの情報の 'System.Runtime.InteropServices.COMException': hergestelltのwerden NICHT Serververbindung konnteダイ。

'MFPUnhandledExc1.exe'(CoreCLR:CoreCLR_UWP_Domain):ロード 'D:\ VS2015Projects \ MFPUnhandledExc1 \ binに\ X86 \デバッグ\ APPX \ System.Resources.ResourceManager.dll'。 モジュールはシンボルなしで作成されました。例外がスローされました: 'System.Net.Http.HttpRequestException' in System.Net.Http.dll 例外がスローされました: 'System.Net.Http.HttpRequestException' in mscorlib.ni.dll Exception throw: 'System.Net。 Http.HttpRequestException ' 例外がスローSystem.Net.Http.dllに: 'System.Net.Http.HttpRequestExceptionをMFPUnhandledExc1.exe' mscorlib.ni.dllに ''(CoreCLR:CoreCLR_UWP_Domain): ロード ' D:\ VS2015Projects \ MFPUnhandledExc1 \ bin \ x86 \ Debug \ AppX \ System.Runtime.InteropServices.dll 'をクリックします。 PDBファイルを見つけたり開くことができません。 'System.Net.Http.HttpRequestException' mscorlib.ni.dll例外 でスロー:例外がスローさSystem.Net.Requests.dll例外 の 'System.Net.WebException' スロー: 'System.NullReferenceException' の IBMMobileFirstPlatformFoundationWin10に.dllが

ConnectMobileFirst()あなたは、そのコールスタックにIBMMobileFirstPlatformFoundationWin10.dllを持って、まだアクティブなワーカースレッドがある見ることができます呼び出した後、あなたは行にブレークポイントを設定した場合。バックエンド接続がOKの場合、このスレッドはもう存在しません。

この動作は、MobileFirst Serverがオフラインであるだけでなく、サーバーの応答が遅い、またはネットワークが低速で、サーバーの応答が大きい場合にも発生します。これは接続中だけでなく、WorklightResourceRequest.send()の間にも発生します。

私の質問:

  • 私は自分のアプリケーションを殺すからこの浮遊スレッドを防ぐために何ができますか? (短期的な解決策)
  • なぜObtainAccessToken()への呼び出しがすでに終了していても、ワーカースレッドはまだ存在しますか?
  • このスレッドは例外を処理しないのはなぜですか?

答えて

0

この浮遊スレッドがアプリケーションを強制終了させないようにするにはどうすればよいですか? Application.UnhandledExceptionイベントを見てください。このドキュメントは、MSDNの下記のリンクから入手できます。このイベントは、App.xaml.csコードの背後に置くことができます。

通常、UnhandledExceptionイベントが発生すると、例外が処理されなかったためWindows Runtimeがアプリケーションを終了します。アプリケーションコードには、これに対するいくつかの制御があります。UnhandledExceptionイベントハンドラがイベント引数のHandledプロパティをtrueに設定した場合、ほとんどの場合、アプリケーションは終了しません。あなたの他の質問に関しては

https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.application.unhandledexception

、私はあなたが理解するのに役立ちますC#またはVisual BasicでWindowsランタイムアプリケーションのためのハンドリング例外で、このMSDNの記事の読み取りを持つべきだと思いますあなたのアプリでこれらの例外をどうしているのか。

https://msdn.microsoft.com/en-us/library/windows/apps/dn532194

0

我々は問題を再現することができ、私たちは修正に取り組んでいます。新しいバージョンのSDKをリリースすると更新されます。