我为客户开发原生Windows 10客户端LOB应用程序 环境:Windows 10 Pro(在移动客户端/平板电脑和开发人员盒上),Visual Studio 2015 Professional和Update 3,安装了所有更新和补丁。客户端应用程序使用最新的“IBM MobileFirst SDK for Windows 8 Universal和Windows 10 Universal平台”版本8.0.2016070716
当应用程序联机并且可以访问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事件处理程序调用上述函数。
AccessToken = await ConnectMobileFirst();
if (AccessToken != null)
{
Debug.WriteLine(AccessToken.IsValidToken
? "Connection OK, AccessToken is valid"
: "AccesToken NOT valid");
}
如果可以访问MobileFirst Server,一切都按预期工作,并且AccessToken.IsValidToken为true。
如果MobileFirst Server处于脱机状态,则会发生以下情况:
ConnectMobileFirst()
完成并返回一个AccessToken对象(方法内部不会发生异常)Debug.WriteLine
语句之前和有时之后,其他线程会遇到NullReferenceException。这个“其他”工作线程在IBMMobileFirstPlatformFoundationWin10.dll内的ObtainAccessToken()
调用内部的某个地方启动。 Visual Studio中的“输出”窗口包含以下信息:抛出异常:'System.Runtime.InteropServices.COMException'中 mscorlib.ni.dll WinRT信息:Die Serververbindung konnte nicht hergestellt werden。
抛出异常:'System.Runtime.InteropServices.COMException'中 mscorlib.ni.dll WinRT信息:Die Serververbindung konnte nicht hergestellt werden。
'MFPUnhandledExc1.exe'(CoreCLR:CoreCLR_UWP_Domain):已加载 'd:\ VS2015Projects \ MFPUnhandledExc1 \ BIN \ 86 \调试\ AppX中\ System.Resources.ResourceManager.dll'。 模块没有符号。抛出异常: System.Net.Http.dll中的“System.Net.Http.HttpRequestException” 抛出异常:'System.Net.Http.HttpRequestException'中 抛出mscorlib.ni.dll异常: System.Net.Http.dll中的“System.Net.Http.HttpRequestException” 抛出异常:'System.Net.Http.HttpRequestException'中 mscorlib.ni.dll'MFPUnhandledExc1.exe'(CoreCLR:CoreCLR_UWP_Domain): 加载 'd:\ VS2015Projects \ MFPUnhandledExc1 \ BIN \ 86 \调试\ AppX中\ System.Runtime.InteropServices.dll'。 无法找到或打开PDB文件。抛出异常: mscorlib.ni.dll异常中的“System.Net.Http.HttpRequestException” 抛出:System.Net.Requests.dll异常中的'System.Net.WebException' 抛出:'System.NullReferenceException'中 IBMMobileFirstPlatformFoundationWin10.dll
如果在ConnectMobileFirst()
调用之后在行上设置断点,则可以看到有一个工作线程仍处于活动状态,其调用堆栈中包含IBMMobileFirstPlatformFoundationWin10.dll。如果后端连接正常,则此线程不再存在。
此行为不仅可以在MobileFirst Server脱机但服务器响应缓慢或网络速度慢且服务器响应很大时看到。此外,这不仅在连接期间,而且在WorklightResourceRequest.send()
期间。
我的问题:
答案 0 :(得分:1)
我们的客户端SDK代码中存在错误。我们已在问题https://www-304.ibm.com/support/entdocview.wss?uid=swg1PI68253中修复了此问题。
修复程序将发布,并将在下一个nuget版本的nuget中提供。
答案 1 :(得分:0)
我该怎么做才能防止这个迷路线程杀死我的应用程序? 看看Application.UnhandledException事件,您可以通过以下链接在MSDN上找到此文档。您可以在App.xaml.cs代码中连接此事件。
通常在触发UnhandledException事件后,Windows运行时会终止应用程序,因为该异常未处理。应用程序代码对此有一些控制:如果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
答案 2 :(得分:0)
我们能够重现这个问题,我们正在努力解决这个问题。我们将在发布新版SDK后更新。