我有一个在Asp.net网站上托管的silverlight应用程序。用于获取来回WCF服务的数据。用户可以独立使用应用程序和网站。
如果asp.net网站被用户注销,则Silverlight应用程序会继续运行,但由于WCF服务不再可用,因为它使用asp.net会话,因此会面临超时问题。
Silverlight无法将会话检测为不再处于活动状态,只有解决方法是处理wcf超时异常。 Silverlight应用程序还使用回调来处理结果。
因此,我决定使用Application_Unhandle事件来捕获超时异常而不是经历每次回调和捕获超时异常,如果是这样,将用户重定向到Asp.net登录页面或显示消息框以通知用户会话已过期请再次登录
private void Current_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) {
if (e.ExceptionObject is System.ServiceModel.CommunicationException) {
// Inform the user
// Recover from the error
e.Handled = true;
MessageBox.Show("Session is expired. Please login again to continue.");
}
// Exception is unrecoverable so stop the application and allow the
// Silverlight plug-in control to detect and process the exception.
}
这对我当地的环境非常有用。
但是当我在服务器上部署它时,它不起作用。
更新
在进一步调查中,我发现IE的脚本调试器会抛出javascript未处理的异常,这会破坏代码执行,因此代码永远不会到达Silverlight Application_Unhandle代码。
更新2
我正在获得视觉工作室Just in Time错误。