0

使用 XmlDataSource 时,是否有处理远程 XML 文件不可用时引起的异常的好方法?我对 .NET 和使用 C# 有点陌生。

4

3 回答 3

1

当引发这样的异常时,由您决定什么适合您的应用程序。你唯一不应该做的就是忽略它。

您拥有的选项包括:

  • 自动重试多次,以防连接问题是暂时的
  • 向用户返回适当的错误消息,并可能记录或通过电子邮件发送异常
  • 使用先前缓存的 XML 文件版本,直到可以获取新副本
  • 让异常冒泡到调用层并让它处理它(也许先记录它)

您可能还需要做的一件事是清理 finally 块中的所有资源(例如打开的连接)。

于 2010-04-12T18:27:13.377 回答
0

我假设这已经解决,但我会回答它以防其他人遇到问题并偶然发现这篇文章。

您还需要在 try 块中绑定到您的 XmlDataSource ...

            try
            {

                xdsRSS.DataFile = Configuration.BeaconConfigurationSection.Current.SyndicatedJobs.RssUrl;
                xdsRSS.XPath = Configuration.BeaconConfigurationSection.Current.SyndicatedJobs.XPath;
                xdsRSS.EnableCaching = true;
                xdsRSS.CacheExpirationPolicy = DataSourceCacheExpiry.Absolute;
                xdsRSS.CacheDuration = 6000;
                dlRSS.DataSource = xdsRSS;
                dlRSS.DataBind();
            }
            catch
            {
                dlRSS.Visible = false;
                pnlLinkToJobSite.Visible = true;
            }

...确保从中继器中删除 DataSourceID 属性,您应该一切顺利。

于 2010-10-15T10:27:14.043 回答
0

我尝试了捕获异常以触发不同处理的方法,但由于某种原因它不起作用。而不是导致 ErrorMessage 显示和 Repeater1 被隐藏的异常,我仍然只是得到一个杀死页面的异常:异常详细信息:System.Net.WebException:远程服务器返回错误:(404)未找到。

为什么我不能捕捉到异常然后采取不同的行动?

protected void Page_PreRender(object sender, System.EventArgs e)
{
    try
    {
        RssSource.DataFile = "http://www.example.com/rss/feed/index1.aspx";
        RssSource.XPath = "/rss/channel/item[position()<3]";
        RssSource.EnableCaching = true;
        RssSource.CacheDuration = 43200;
        RssSource.CacheExpirationPolicy = DataSourceCacheExpiry.Absolute;
    }
    catch (Exception ex)
    {
        ErrorMessage.Visible = true;
        Repeater1.Visible = false;

    }
}

<asp:Label ID="ErrorMessage" runat="server" Text="News not unavailable" Visible="false" /> 
<asp:XmlDataSource ID="RssSource" runat="server" />
<asp:Repeater ID="repeater1" runat="server" DataSourceID="RssSource">
    <ItemTemplate>
        <p><%# XPath("description")%></p>
    </ItemTemplate>
</asp:Repeater>  
于 2010-04-20T21:00:04.667 回答