C# 捕获web控件中未处理的异常以允许页面呈现

C# 捕获web控件中未处理的异常以允许页面呈现,c#,user-controls,exception-handling,robustness,ektron,C#,User Controls,Exception Handling,Robustness,Ektron,(我实际上使用的是Ektron CMS,我使用的是小部件,这是用户控件的一个非常简单的扩展) 问题:我有一个包含许多小部件的网页。如果其中一个小部件中发生异常,页面将停止,并向用户提供服务器错误。我希望在小部件中有未处理的异常,以记录异常,停止该小部件的显示并允许页面继续 例如,每个页面上都有一个天气小部件,通过web服务获取数据。如果web服务向您发送格式错误的XML,您希望该站点仍然可用 潜在解决方案: 计划A)在每个小部件中,将init或display函数的内容包装在Try-Catch语句

(我实际上使用的是Ektron CMS,我使用的是
小部件
,这是用户控件的一个非常简单的扩展)

问题:我有一个包含许多小部件的网页。如果其中一个小部件中发生异常,页面将停止,并向用户提供服务器错误。我希望在小部件中有未处理的异常,以记录异常,停止该小部件的显示并允许页面继续

例如,每个页面上都有一个天气小部件,通过web服务获取数据。如果web服务向您发送格式错误的XML,您希望该站点仍然可用

潜在解决方案:
计划A)在每个小部件中,将init或display函数的内容包装在Try-Catch语句中。
计划B)创建一个扩展IWidget的新IRobustWidget接口,并在其中执行Try捕获

这两个选项对我来说都有点“脏”,因为我已经读到了generic
catch(exception)
语句有点反模式。我倾向于B计划,因为这看起来更模块化

  • 我是否错过了其他选择
  • 在这方面,一般的试一试可以吗


您通过web服务加载数据的事实让我想知道您是否应该异步加载此数据,通过ajax加载
,或
;i、 e.小部件在单独的请求中下载。这有两个好处:

  • 核心页面根本不会因为获取数据而延迟—应该在主页完成后短暂加载数据
  • 如果面板无法加载。。。。meh(假设拥有是好的,但不是关键的)

缺点是额外的往返,但与其他发生的事情相比,这不一定会造成问题。

我找到了我想要的东西-


我还意识到我需要决定我需要关注的事件(渲染、加载或自定义设置显示功能)

谢谢,我没有考虑过这一点。这符合我的决定,使控件本身对错误处理更负责。我不再试图让页面呈现“不管发生什么”,因为在我们的项目的这个阶段,这似乎太费劲了。