SharePoint 2007 Web 部件的错误处理






3.67/5 (5投票s)
2007年4月12日
2分钟阅读

48884
SharePoint 2007 Web 部件的错误处理方法
引言
在交付 Web 部件时,您需要有一种处理错误的方法,以便 Web 部件能够以一种良好的方式“终止”,并以受控的方式向管理员传达问题。本文解释了我使用的方法。这里使用的方法是在 CreateChildControl
中捕获错误,然后在 LiteralControls
中渲染时显示错误。
Web 部件重写
如果您继承自 System.Web.UI.WebControls.WebParts.Webpart,您应该重写以下方法
CreateChildControls
:由 ASP.NET 页面框架调用,以通知使用基于组合的实现的服务器控件,在准备回发或渲染时创建包含的任何子控件。Render
:将控件渲染到指定的 HTML writer。
谁应该捕获我们抛出的异常...
我看到的问题是,如果您没有以受控的方式处理错误,整个 SharePoint 页面会损坏,这是不可接受的。我们应该有以下错误处理目标
- 优雅地终止
如果 Web 部件只是抛出错误,SharePoint 页面将无法使用 - 向最终用户报告一些信息
我们需要告诉最终用户我们遇到了问题 - 发送更多错误信息以便进行故障排除
我们需要有能力为系统管理员提供更详细的错误报告...
我的方法:编写 Web 部件
为了至少以受控的方式“终止”,我实现了以下方法。我仍然缺少一些关于如何在 SharePoint 2007 中进行 Tracing 和事件记录的良好指南,来自 Microsoft。
- 创建一个私有变量来存储 Web 部件内部的
Exception
private Exception childException = null;
- 在
CreateChildControls
中,使用try
/catch
并在childException
变量中捕获错误try { base.CreateChildControls(); ..... } catch (Exception exp) { HttpContext ctx = HttpContext.Current; ctx.Trace.Warn(ex.ToString()); childException = ex; }
- 在
Render
中,使用try
/catch
检查并捕获childException
变量中的错误,然后使用标签在页面中显示结果。protected override void Render(System.Web.UI.HtmlTextWriter writer) { if (childException != null) displayErrorMsg(writer, childException); try { ... ... ... } catch (Exception ex) { displayErrorMsg(writer, ex); }
其中
private void displayErrorMsg(HtmlTextWriter writer, Exception ex) { this.Controls.Clear(); this.Controls.Add(new LiteralControl(ex.Message)); if (ex.InnerException != null) { this.Controls.Add(new LiteralControl(ex.InnerException.Message)); } this.Controls.Add(new LiteralControl()); base.Render(writer); HttpContext ctx = HttpContext.Current; ctx.Trace.Warn(ex.ToString()); }
关注点
在使用 SharePoint 2007 之后,我缺少关于创建 Web 部件的良好信息来源。大多数示例只是“Hello World”级别的复杂性,如果您想交付生产环境中的内容,这毫无用处。
历史
- 2007 年 4 月 11 日:创建