silverlight对象标签接受'onerror'参数,该参数回调您选择的一段javascript。由Visual Studio模板生成的默认实现组装描述性消息并将其作为错误抛出(例如,IE显示小警告三角形)。
在我看来,每次触发此回调时,我们的silverlight实例都已死,您需要刷新页面。这是一个合理的推论吗?
另一个问题是如何最好地处理此回调。显示小警告图标有点以开发人员为中心,它不允许我们(开发人员)在客户机器上运行时发现生产中实际失败的内容。人们用这个做什么?我们自己(或多或少具体)的几个想法是:
通过一些公开的端点
删除隐藏silverlight对象,向用户显示更好,更具描述性的消息,并再次启动“刷新”链接以启动Silverlight页面(我们运行全尺寸的Silverlight应用程序,如果silverlight对象不是“无论如何,客户也可以重装”
想法,想法,最佳实践,反模式?你们在做什么(除了确保Silverlight应用程序永远不会失败,但这是另一个讨论)?
答案 0 :(得分:3)
我喜欢以“表单”的形式使用SilverlightFX获取源http://github.com/NikhilK/silverlightfx/tree/master的一个很好的错误报告,检查它非常酷的框架否则基本上只是一个错误的摘要,发送它的能力通过上传电子邮件支持和“oops we goofed”标题:)我用这种方式处理所有未处理的开发,还有一篇关于使用字典按类型处理错误的好文章 http://www.netfxharmonics.com/2009/04/Exception-Handlers-for-Silverlight-20也是我的最爱 。希望这有帮助
答案 1 :(得分:2)
我建议您更改实例化Silverlight控件的方式。您可以在Silverlight.js文件中调用Silverlight.CreateObjectEx(),而不是使用object标记。对于您的场景,这可能更自然一些。如果失败,您可以再次调用它,这比尝试重新加载对象标记更简单。例如:
Silverlight.createObjectEx(
{
source: '/../VideoPlayer.xap',
parentElement: document.getElementById('movieplayerDiv'),
id: 'VideoPlayer',
properties: {
width: '100%',
height: '100%',
background: '#FFd9e3d7',
inplaceInstallPrompt: false,
isWindowless: 'false',
version: '2.0'
},
events: {
onError: onSLError,
onLoad: onSLLoad
},
initParams: "...",
context: null
});
function onSLLoad(sender, args) {
}
function onSLError(sender, args) {
// alert('error');
}
其他想法:
Silverlight中有两种终端错误。 1)托管错误(点击托管的Application_UnhandledException方法)。请注意,有些错误甚至可能达不到这一点。如果由于某种原因无法加载托管基础结构(内存错误可能......),则不会出现此类错误。但是,如果可以获得它,您可以使用Web服务(或CLOG项目)将其传回服务器。 2)Javascript错误。这些就是你现在所得到的。我建议使用JQuery(或首选的Javascript库)将它们反馈回您的服务器。类似的东西:
$.post(this.href, { func: "countVote" },
功能(数据){...} 当然,如何在服务器上处理此问题取决于服务器堆栈的外观。这在MVC中非常简单,顺便说一句。