/// <summary>
        /// Loads and displayes the cached capabilities for the server.
        /// </summary>
        private bool LoadCachedCapabilities(WmsServer server)
        {
            var capabilities = WmsCapabilitiesCache.Load(server.Url);

            if (capabilities != null)
            {
                DisplayServerCapabilities(capabilities);
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// Displayes and cached the results of GetCapabilities request.
        /// </summary>
        private void ProcessWmsCapabilitiesResults(Task <Stream> task)
        {
            var server = SelectedServer;

            string msg = "WMS server GetCapabilities request failed: " + Environment.NewLine;

            try
            {
                using (var stream = task.Result)
                {
                    WmsCapabilities capabilities;

                    if (WmsCapabilitiesCache.Save(server.Url, stream))
                    {
                        // ConnectStream returned by WebResponse doesn't support seek operation,
                        // so we can't read it twice, therefore on successful saving to the disk
                        // we are rereading it from file
                        capabilities = WmsCapabilitiesCache.Load(server.Url);
                    }
                    else
                    {
                        capabilities = new WmsCapabilities(stream);
                    }

                    DisplayServerCapabilities(capabilities);
                }
            }
            catch (AggregateException ex)
            {
                MessageService.Current.Warn(msg + ex.InnerException.Message);
            }
            catch (Exception ex)
            {
                Logger.Current.Warn(msg + server.Name, ex);
            }
            finally
            {
                View.HideHourglass();
            }
        }