65.9K
CodeProject 正在变化。 阅读更多。
Home

SharePoint 2007 Web 部件的错误处理

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (5投票s)

2007年4月12日

2分钟阅读

viewsIcon

48884

SharePoint 2007 Web 部件的错误处理方法

引言

在交付 Web 部件时,您需要有一种处理错误的方法,以便 Web 部件能够以一种良好的方式“终止”,并以受控的方式向管理员传达问题。本文解释了我使用的方法。这里使用的方法是在 CreateChildControl 中捕获错误,然后在 LiteralControls 中渲染时显示错误。

Web 部件重写

如果您继承自 System.Web.UI.WebControls.WebParts.Webpart,您应该重写以下方法

  1. CreateChildControls:由 ASP.NET 页面框架调用,以通知使用基于组合的实现的服务器控件,在准备回发或渲染时创建包含的任何子控件。
  2. Render:将控件渲染到指定的 HTML writer。

谁应该捕获我们抛出的异常...

我看到的问题是,如果您没有以受控的方式处理错误,整个 SharePoint 页面会损坏,这是不可接受的。我们应该有以下错误处理目标

  1. 优雅地终止
    如果 Web 部件只是抛出错误,SharePoint 页面将无法使用
  2. 向最终用户报告一些信息
    我们需要告诉最终用户我们遇到了问题
  3. 发送更多错误信息以便进行故障排除
    我们需要有能力为系统管理员提供更详细的错误报告...

我的方法:编写 Web 部件

为了至少以受控的方式“终止”,我实现了以下方法。我仍然缺少一些关于如何在 SharePoint 2007 中进行 Tracing 和事件记录的良好指南,来自 Microsoft。

  1. 创建一个私有变量来存储 Web 部件内部的 Exception
    private Exception childException = null;
  2. CreateChildControls 中,使用 try/catch 并在 childException 变量中捕获错误
    try
    {
        base.CreateChildControls();
        .....
    }
    catch (Exception exp)
    {
        HttpContext ctx = HttpContext.Current;
        ctx.Trace.Warn(ex.ToString());
        childException = ex;
    }
    
  3. 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 日:创建
© . All rights reserved.