Обработка XmlDataSource, когда удаленный источник XML недоступен - PullRequest
0 голосов
/ 12 апреля 2010

При использовании XmlDataSource есть хороший способ обработки исключений, которые возникают, когда удаленный XML-файл недоступен? Я немного новичок в .NET и использую C #.

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Вы действительно должны определить, что подходит для вашего приложения, когда возникает исключение, подобное этому. Единственное, что вы не должны делать, это игнорировать.

Опции, которые у вас есть:

  • Автоматическая повторная попытка несколько раз, если проблема с подключением временная
  • Вернуть соответствующее сообщение об ошибке пользователю и, возможно, зарегистрировать или отправить электронное сообщение об исключении
  • Использовать ранее кэшированную версию XML-файла, пока не будет получена свежая копия
  • Пусть исключение всплывет к вызывающему слою, и пусть оно с ним справится (возможно, сначала его зарегистрирует)

Одной вещью, которую вам также может понадобиться, является очистка любых ресурсов (например, открытых соединений) в блоке finally.

0 голосов
/ 15 октября 2010

Я предполагаю, что это было решено, но я отвечаю на него, если у кого-то еще есть проблема и натыкается на этот пост.

Вам также необходимо привязать ваш XmlDataSource в вашем блоке try ...

            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 из вашего повторителя, и все будет хорошо.

0 голосов
/ 21 апреля 2010

Я попробовал метод перехвата исключения, чтобы вызвать другую обработку, но по какой-то причине он не работает. Вместо исключения, вызывающего отображение ErrorMessage и скрытие Repeater1, я все равно получаю исключение, которое убивает страницу: Сведения об исключении: System.Net.WebException: удаленный сервер возвратил ошибку: (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>  
...