Неожиданный конец файла в C # при чтении канала GeoRSS

В моей программе я получаю GeoRSS с веб-сайта каждые 10 секунд. До тех пор, пока в ленту GeoRSS не добавляются новые элементы, программа работает нормально (т.е. я могу правильно выбирать и анализировать rss - даже когда элементы существующих элементов rss меняют свое значение). Однако, как только новый элемент добавляется в RSS-канал, я получаю следующую ошибку:

Неожиданный конец файла при синтаксическом анализе имени. Линия 85, позиция 13.

Трассировки стека:

       at System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
   at System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32& colonPos)
   at System.Xml.XmlTextReaderImpl.ParseElement()
   at System.Xml.XmlTextReaderImpl.ParseElementContent()
   at System.Xml.XmlReader.MoveToContent()
   at System.Xml.XmlReader.IsStartElement()
   at System.ServiceModel.Syndication.Rss20FeedFormatter.ReadItemFrom(XmlReader reader, SyndicationItem result, Uri feedBaseUri)
   at System.ServiceModel.Syndication.Rss20FeedFormatter.ReadItem(XmlReader reader, SyndicationFeed feed)
   at System.ServiceModel.Syndication.Rss20FeedFormatter.ReadItems(XmlReader reader, SyndicationFeed feed, Boolean& areAllItemsRead)
   at System.ServiceModel.Syndication.Rss20FeedFormatter.ReadXml(XmlReader reader, SyndicationFeed result)
   at System.ServiceModel.Syndication.Rss20FeedFormatter.ReadFrom(XmlReader reader)
   at System.ServiceModel.Syndication.SyndicationFeed.Load[TSyndicationFeed](XmlReader reader)
   at Master.Model.ResourceManagerService.wc_OpenReadCompleted(Object sender, OpenReadCompletedEventArgs e) in C:\Users\polle\Documents\Visual Studio 2010\Projects\Master(23)\LSCommMaster\Master\Master\Services\ResourceManagerService.cs:line 319
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.ProcessQueue()
   at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
   at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.Dispatcher.WrappedInvoke(Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
   at System.Windows.Threading.DispatcherOperation.InvokeImpl()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Threading.DispatcherOperation.Invoke()
   at System.Windows.Threading.Dispatcher.InvokeImpl(DispatcherOperation operation, CancellationToken cancellationToken, TimeSpan timeout)
   at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
   at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
   at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
   at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
   at System.Windows.Application.RunInternal(Window window)
   at System.Windows.Application.Run()
   at Master.App.Main() in C:\Users\polle\Documents\Visual Studio 2010\Projects\Master(23)\LSCommMaster\Master\Master\obj\Debug\App.g.cs:line 0
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

Код, который я использую для получения RSS, приведен ниже:

public static void FetchRSS(string url)
        {            

        if (url != String.Empty)
        {
            LoadRSS(url.Trim());
            DispatcherTimer UpdateTimer = new System.Windows.Threading.DispatcherTimer();
            UpdateTimer.Interval = new TimeSpan(0, 0, 0, 0, 10000);
            UpdateTimer.Tick += (evtsender, args) =>
            {
                LoadRSS(url.Trim());
            };
            UpdateTimer.Start();
        }
    }

    private static void LoadRSS(string uri)
    {
        Trace.WriteLine("Fetching rss feed");
        WebClient wc = new WebClient();
        wc.OpenReadCompleted += wc_OpenReadCompleted;
        Uri feedUri = new Uri(uri, UriKind.Absolute);
        wc.OpenReadAsync(feedUri);
    }

    private static void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {

        if (e.Error != null)
        {
            Trace.WriteLine("Error in Reading Feed. Try Again later!");
            return;
        }

        using (Stream s = e.Result)
        {
            SyndicationFeed feed;
            List feedItems = new List();

            using (XmlReader reader = XmlReader.Create(s))
            {
                try
                {
                    feed = SyndicationFeed.Load(reader);
                    foreach (SyndicationItem feedItem in feed.Items)
                    {
                        SyndicationElementExtensionCollection ec = feedItem.ElementExtensions;

                        string title = feedItem.Title.Text;
                        string x = "";
                        string y = "";
                        string state = "not available";
                        string type = "not available";
                        string task = "not available";

                        foreach (SyndicationElementExtension ee in ec)
                        {
                            XmlReader xr = ee.GetReader();

                            switch (ee.OuterName)
                            {
                                case ("lat"):
                                    {
                                        y = xr.ReadElementContentAsString();
                                        break;
                                    }
                                case ("long"):
                                    {
                                        x = xr.ReadElementContentAsString();
                                        break;
                                    }
                                case ("point"):
                                    {
                                        string p = xr.ReadElementString();
                                        string[] coordinates = p.Split(' ');                                            
                                        y = coordinates[0];
                                        x = coordinates[1];
                                        break;
                                    }
                                case ("state"):
                                    {
                                        state = xr.ReadElementString();                                       
                                        break;
                                    }
                                case ("type"):
                                    {
                                        type = xr.ReadElementString();
                                        break;
                                    }
                                case ("taskDescription"):
                                    {
                                        task = xr.ReadElementString();
                                        break;
                                    }
                            }

                        }

                        if (!string.IsNullOrEmpty(x))
                        {
                            Resource resource = new Resource()
                            {
                                Geometry = new MapPoint(Convert.ToDouble(x, System.Globalization.CultureInfo.InvariantCulture),
                                Convert.ToDouble(y, System.Globalization.CultureInfo.InvariantCulture), new SpatialReference(4326))
                            };

                            resource.Attributes.Add("TITLE", title);
                            resource.Attributes.Add("STATE", state);
                            resource.Attributes.Add("TYPE", type);
                            resource.Attributes.Add("TASK", task);
                            resource.Attributes.Add("PENDINGTASK", "none");

                            resource.Title = title;
                            resource.TypeDescription = type;
                            resource.State = state;
                            resource.TaskDescription = task;
                            resource.PendingTask = "none";

                            ResourceDataReceivedMessage msg = new ResourceDataReceivedMessage() { Resource = resource };
                            Messenger.Default.Send(msg);

                        }
                        else
                        {
                            Trace.WriteLine("STRING IS NULL OR EMPTY");
                        }
                    }
                }
                catch
                {
                    Trace.WriteLine("Exception occurred while fetching RSS feed" );
                }

            }
        }
    }

У кого-нибудь есть идея, что?Является ли причиной ошибки, и как я могу предотвратить это?

Ответы на вопрос(1)

Ваш ответ на вопрос