0

XmlDataSource を使用する場合、リモート XML ファイルが利用できないときに発生する例外を処理する良い方法はありますか? 私は .NET が初めてで、C# を使用しています。

4

3 に答える 3

1

このような例外が発生したときにアプリケーションに適したものを決定するのは、実際にはあなた次第です。あなたがしてはいけない唯一のことは、それを無視することです。

次のオプションがあります。

  • 接続の問題が一時的なものである場合に備えて、何度か自動的に再試行します
  • ユーザーに適切なエラー メッセージを返し、例外をログに記録するか電子メールで送信します。
  • 新しいコピーを取得できるようになるまで、以前にキャッシュされたバージョンの XML ファイルを使用します
  • 例外を呼び出し層までバブルアップさせ、それを処理させます (おそらく最初にログに記録します)。

また、行う必要があることの 1 つは、Finally ブロック内のリソース (開いている接続など) をクリーンアップすることです。

于 2010-04-12T18:27:13.377 に答える
0

例外をキャッチして別の処理をトリガーするアプローチを試みましたが、何らかの理由で機能しません。ErrorMessage が表示され、Repeater1 が非表示になる例外の代わりに、ページを強制終了する例外が発生するだけです: Exception Details: System.Net.WebException: The remote server returned an error: (404) Not Found.

例外をキャッチして別のアクションを実行できないのはなぜですか?

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 に答える
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 に答える