Fixing code for PR
authorGerardo Hurtado Lozano <kanegerardo_@hotmail.com>
Thu, 6 Jul 2017 21:06:29 +0000 (14:06 -0700)
committerGerardo Hurtado Lozano <kanegerardo_@hotmail.com>
Thu, 6 Jul 2017 21:06:29 +0000 (14:06 -0700)
Commit migrated from https://github.com/dotnet/corefx/commit/362f4835d85f3d333cc9a8de2d59129958c498f6

12 files changed:
src/libraries/Atom10FeedFormatter.cs
src/libraries/Atom10ItemFormatter.cs
src/libraries/AtomPub10CategoriesDocumentFormatter.cs
src/libraries/AtomPub10ServiceDocumentFormatter.cs
src/libraries/CategoriesDocument.cs
src/libraries/CategoriesDocumentFormatter.cs
src/libraries/ExtensibleSyndicationObject.cs
src/libraries/Resources/Resources.txt
src/libraries/Rss20FeedFormatter.cs
src/libraries/SyndicationFeed.cs
src/libraries/SyndicationFeedFormatter.cs
src/libraries/tests/BasicScenarioTests.cs

index 9f47804..bda79c3 100644 (file)
@@ -145,7 +145,7 @@ namespace Microsoft.ServiceModel.Syndication
             await ReadFeedFromAsync(XmlReaderWrapper.CreateFromReader(reader), this.Feed, false);
         }
 
-        public override async Task WriteTo(XmlWriter writer)
+        public override async Task WriteToAsync(XmlWriter writer)
         {
             if (writer == null)
             {
@@ -155,7 +155,7 @@ namespace Microsoft.ServiceModel.Syndication
             XmlWriterWrapper wrappedWriter = XmlWriterWrapper.CreateFromWriter(writer);
 
             await wrappedWriter.WriteStartElementAsync(Atom10Constants.FeedTag, Atom10Constants.Atom10Namespace);
-            await WriteFeed(wrappedWriter);
+            await WriteFeedAsync(wrappedWriter);
             await wrappedWriter.WriteEndElementAsync();
         }
 
@@ -259,10 +259,10 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-        internal async Task<TextSyndicationContent> ReadTextContentFromAsync(XmlReaderWrapper reader, string context, bool preserveAttributeExtensions)
+        internal Task<TextSyndicationContent> ReadTextContentFromAsync(XmlReaderWrapper reader, string context, bool preserveAttributeExtensions)
         {
             string type = reader.GetAttribute(Atom10Constants.TypeTag);
-            return await ReadTextContentFromHelperAsync(reader, type, context, preserveAttributeExtensions);
+            return ReadTextContentFromHelperAsync(reader, type, context, preserveAttributeExtensions);
         }
 
         internal static async Task WriteCategoryAsync(XmlWriterWrapper writer, SyndicationCategory category, string version)
@@ -289,13 +289,17 @@ namespace Microsoft.ServiceModel.Syndication
             await writer.WriteEndElementAsync();
         }
 
-        internal async Task ReadItemFrom(XmlReaderWrapper reader, SyndicationItem result)
+        internal async Task ReadItemFromAsync(XmlReaderWrapper reader, SyndicationItem result)
         {
             await ReadItemFromAsync(reader, result, null);
         }
 
         internal async Task<bool> TryParseFeedElementFromAsync(XmlReaderWrapper reader, SyndicationFeed result)
         {
+            if (await reader.MoveToContentAsync() != XmlNodeType.Element)
+            {
+                return false;
+            }
 
             string name = reader.LocalName;
             string ns = reader.NamespaceURI;
@@ -354,6 +358,11 @@ namespace Microsoft.ServiceModel.Syndication
 
         internal async Task<bool> TryParseItemElementFromAsync(XmlReaderWrapper reader, SyndicationItem result)
         {
+            if (await reader.MoveToContentAsync() != XmlNodeType.Element)
+            {
+                return false;
+            }
+
             string name = reader.LocalName;
             string ns = reader.NamespaceURI;
 
@@ -406,8 +415,10 @@ namespace Microsoft.ServiceModel.Syndication
                     default:
                         return false;
                 }
+
                 return true;
             }
+
             return false;
         }
 
@@ -429,32 +440,37 @@ namespace Microsoft.ServiceModel.Syndication
 
         internal async Task WriteFeedAuthorsToAsync(XmlWriter writer, Collection<SyndicationPerson> authors)
         {
+            XmlWriterWrapper wrappedWriter = XmlWriterWrapper.CreateFromWriter(writer);
             for (int i = 0; i < authors.Count; ++i)
             {
                 SyndicationPerson p = authors[i];
-                await WritePersonToAsync(XmlWriterWrapper.CreateFromWriter(writer), p, Atom10Constants.AuthorTag);
+                await WritePersonToAsync(wrappedWriter, p, Atom10Constants.AuthorTag);
             }
         }
 
         internal async Task WriteFeedContributorsToAsync(XmlWriter writer, Collection<SyndicationPerson> contributors)
         {
+            XmlWriterWrapper wrappedWriter = XmlWriterWrapper.CreateFromWriter(writer);
             for (int i = 0; i < contributors.Count; ++i)
             {
                 SyndicationPerson p = contributors[i];
-                await WritePersonToAsync(XmlWriterWrapper.CreateFromWriter(writer), p, Atom10Constants.ContributorTag);
+                await WritePersonToAsync(wrappedWriter, p, Atom10Constants.ContributorTag);
             }
         }
 
-        internal async Task WriteFeedLastUpdatedTimeToAsync(XmlWriterWrapper writer, DateTimeOffset lastUpdatedTime, bool isRequired)
+        internal Task WriteFeedLastUpdatedTimeToAsync(XmlWriterWrapper writer, DateTimeOffset lastUpdatedTime, bool isRequired)
         {
             if (lastUpdatedTime == DateTimeOffset.MinValue && isRequired)
             {
                 lastUpdatedTime = DateTimeOffset.UtcNow;
             }
+
             if (lastUpdatedTime != DateTimeOffset.MinValue)
             {
-                await WriteElementAsync(writer, Atom10Constants.UpdatedTag, AsString(lastUpdatedTime));
+                return WriteElementAsync(writer, Atom10Constants.UpdatedTag, AsString(lastUpdatedTime));
             }
+
+            return Task.CompletedTask;
         }
 
         internal async Task WriteItemAuthorsToAsync(XmlWriter writer, Collection<SyndicationPerson> authors)
@@ -467,9 +483,9 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-        internal async Task WriteItemContentsAsync(XmlWriter dictWriter, SyndicationItem item)
+        internal Task WriteItemContentsAsync(XmlWriter dictWriter, SyndicationItem item)
         {
-            await WriteItemContentsAsync(XmlWriterWrapper.CreateFromWriter(dictWriter), item, null);
+            return WriteItemContentsAsync(XmlWriterWrapper.CreateFromWriter(dictWriter), item, null);
         }
 
         internal async Task WriteItemContributorsToAsync(XmlWriter writer, Collection<SyndicationPerson> contributors)
@@ -483,14 +499,14 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-        internal async Task WriteItemLastUpdatedTimeToAsync(XmlWriterWrapper writer, DateTimeOffset lastUpdatedTime)
+        internal  Task WriteItemLastUpdatedTimeToAsync(XmlWriterWrapper writer, DateTimeOffset lastUpdatedTime)
         {
             if (lastUpdatedTime == DateTimeOffset.MinValue)
             {
                 lastUpdatedTime = DateTimeOffset.UtcNow;
             }
 
-            await writer.WriteElementStringAsync(Atom10Constants.UpdatedTag,
+            return writer.WriteElementStringAsync(Atom10Constants.UpdatedTag,
                 Atom10Constants.Atom10Namespace,
                 AsString(lastUpdatedTime));
         }
@@ -686,10 +702,7 @@ namespace Microsoft.ServiceModel.Syndication
             dateTimeString = dateTimeString.Trim();
             if (dateTimeString.Length < 20)
             {
-                //throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
-                //    new XmlException(FeedUtils.AddLineInfo(reader,
-                //    SR.ErrorParsingDateTime)));
-                //throw new XmlException(FeedUtils.AddLineInfo(reader, SR.ErrorParsingDateTime));
+                throw new XmlException(SR.ErrorParsingDateTime);
             }
             if (dateTimeString[19] == '.')
             {
@@ -722,9 +735,9 @@ namespace Microsoft.ServiceModel.Syndication
             return new DateTimeOffset();
         }
         
-        private async Task ReadCategoryAsync(XmlReaderWrapper reader, SyndicationCategory category)
+        private Task ReadCategoryAsync(XmlReaderWrapper reader, SyndicationCategory category)
         {
-            await ReadCategoryAsync(reader, category, this.Version, this.PreserveAttributeExtensions, this.PreserveElementExtensions, _maxExtensionSize);
+             return ReadCategoryAsync(reader, category, this.Version, this.PreserveAttributeExtensions, this.PreserveElementExtensions, _maxExtensionSize);
         }
 
         private async Task<SyndicationCategory> ReadCategoryFromAsync(XmlReaderWrapper reader, SyndicationFeed feed)
@@ -798,6 +811,7 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     await reader.ReadEndElementAsync();
                 }
+
                 return result;
             }
             else
@@ -806,11 +820,9 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-
         private async Task<SyndicationFeed> ReadFeedFromAsync(XmlReaderWrapper reader, SyndicationFeed result, bool isSourceFeed)
         {
             await reader.MoveToContentAsync();
-
             //fix to accept non contiguous items
             NullNotAllowedCollection<SyndicationItem> feedItems = new NullNotAllowedCollection<SyndicationItem>();
 
@@ -846,7 +858,7 @@ namespace Microsoft.ServiceModel.Syndication
                             {
                                 if (_preserveAttributeExtensions)
                                 {
-                                    result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), await reader.GetValueAsync());
+                                    result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), val);
                                 }
                             }
                         }
@@ -990,14 +1002,9 @@ namespace Microsoft.ServiceModel.Syndication
                                 {
                                     if (_preserveElementExtensions)
                                     {
-                                        if (buffer == null)
-                                        {
-                                            buffer = new XmlBuffer(_maxExtensionSize);
-                                            extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
-                                            extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
-                                        }
-
-                                        await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
+                                        var tuple = await CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, _maxExtensionSize);
+                                        buffer = tuple.Item1;
+                                        extWriter = tuple.Item2;
                                     }
                                     else
                                     {
@@ -1128,6 +1135,7 @@ namespace Microsoft.ServiceModel.Syndication
                             await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
                         }
                     }
+
                     LoadElementExtensions(buffer, extWriter, link);
                 }
                 finally
@@ -1137,8 +1145,10 @@ namespace Microsoft.ServiceModel.Syndication
                         ((IDisposable)extWriter).Dispose();
                     }
                 }
+
                 await reader.ReadEndElementAsync();
             }
+
             link.Length = length;
             link.MediaType = mediaType;
             link.RelationshipType = relationship;
@@ -1197,6 +1207,7 @@ namespace Microsoft.ServiceModel.Syndication
                     }
                 }
             }
+
             await reader.ReadStartElementAsync();
             if (!isEmpty)
             {
@@ -1206,12 +1217,10 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     while (await reader.IsStartElementAsync())
                     {
-
                         string name = reader.LocalName;
                         string ns = reader.NamespaceURI;
                         bool notHandled = false;
 
-
                         switch (name)
                         {
                             case Atom10Constants.NameTag:
@@ -1257,13 +1266,14 @@ namespace Microsoft.ServiceModel.Syndication
                         ((IDisposable)extWriter).Dispose();
                     }
                 }
+
                 await reader.ReadEndElementAsync();
             }
         }
         
-        private async Task<TextSyndicationContent> ReadTextContentFromAsync(XmlReaderWrapper reader, string context)
+        private Task<TextSyndicationContent> ReadTextContentFromAsync(XmlReaderWrapper reader, string context)
         {
-            return await ReadTextContentFromAsync(reader, context, this.PreserveAttributeExtensions);
+            return  ReadTextContentFromAsync(reader, context, this.PreserveAttributeExtensions);
         }
         
         private async Task WriteCategoriesToAsync(XmlWriter writer, Collection<SyndicationCategory> categories)
@@ -1275,13 +1285,13 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
         
-        private async Task WriteFeed(XmlWriterWrapper writer)
+        private Task WriteFeedAsync(XmlWriterWrapper writer)
         {
             if (this.Feed == null)
             {
                 throw new InvalidOperationException(SR.FeedFormatterDoesNotHaveFeed);
             }
-            await WriteFeedToAsync(writer, this.Feed, false); //  isSourceFeed 
+            return WriteFeedToAsync(writer, this.Feed, false); //  isSourceFeed 
         }
         
         private async Task WriteFeedToAsync(XmlWriterWrapper writer, SyndicationFeed feed, bool isSourceFeed)
@@ -1322,7 +1332,6 @@ namespace Microsoft.ServiceModel.Syndication
             await WriteFeedAuthorsToAsync(writer, feed.Authors);
             await WriteFeedContributorsToAsync(writer, feed.Contributors);
             await WriteElementAsync(writer, Atom10Constants.GeneratorTag, feed.Generator);
-            //Adding icon parsing
             await WriteElementAsync(writer, Atom10Constants.IconTag, feed.IconImage);
 
             for (int i = 0; i < feed.Links.Count; ++i)
index ff492d1..9b3effa 100644 (file)
@@ -19,7 +19,6 @@ namespace Microsoft.ServiceModel.Syndication
     using System.Xml.Schema;
     using System.Xml.Serialization;
 
-    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
     [XmlRoot(ElementName = Atom10Constants.EntryTag, Namespace = Atom10Constants.Atom10Namespace)]
     public class Atom10ItemFormatter : SyndicationItemFormatter
     {
@@ -102,14 +101,14 @@ namespace Microsoft.ServiceModel.Syndication
             return reader.IsStartElement(Atom10Constants.EntryTag, Atom10Constants.Atom10Namespace);
         }
 
-        public override async Task ReadFromAsync(XmlReader reader)
+        public override Task ReadFromAsync(XmlReader reader)
         {
             if (!CanRead(reader))
             {
                 throw new XmlException(String.Format(SR.UnknownItemXml, reader.LocalName, reader.NamespaceURI));
             }
 
-            await ReadItemAsync(reader);
+            return ReadItemAsync(reader);
         }
 
         public override async Task WriteToAsync(XmlWriter writer)
@@ -131,24 +130,23 @@ namespace Microsoft.ServiceModel.Syndication
             return SyndicationItemFormatter.CreateItemInstance(_itemType);
         }
         
-        private async Task ReadItemAsync(XmlReader reader)
+        private Task ReadItemAsync(XmlReader reader)
         {
             SetItem(CreateItemInstance());
-            await _feedSerializer.ReadItemFrom(XmlReaderWrapper.CreateFromReader(XmlDictionaryReader.CreateDictionaryReader(reader)), this.Item);
+            return _feedSerializer.ReadItemFromAsync(XmlReaderWrapper.CreateFromReader(XmlDictionaryReader.CreateDictionaryReader(reader)), this.Item);
         }
 
-        private async Task WriteItemAsync(XmlWriter writer)
+        private Task WriteItemAsync(XmlWriter writer)
         {
             if (this.Item == null)
             {
                 throw new InvalidOperationException(SR.ItemFormatterDoesNotHaveItem);
             }
             XmlDictionaryWriter w = XmlDictionaryWriter.CreateDictionaryWriter(writer);
-            await _feedSerializer.WriteItemContentsAsync(w, this.Item);
+            return _feedSerializer.WriteItemContentsAsync(w, this.Item);
         }
     }
 
-    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
     [XmlRoot(ElementName = Atom10Constants.EntryTag, Namespace = Atom10Constants.Atom10Namespace)]
     public class Atom10ItemFormatter<TSyndicationItem> : Atom10ItemFormatter
         where TSyndicationItem : SyndicationItem, new()
index b05f0aa..38294d7 100644 (file)
@@ -13,7 +13,6 @@ namespace Microsoft.ServiceModel.Syndication
     using System.Xml;
     using System.Xml.Serialization;
 
-    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
     [XmlRoot(ElementName = App10Constants.Categories, Namespace = App10Constants.Namespace)]
     public class AtomPub10CategoriesDocumentFormatter : CategoriesDocumentFormatter
     {
@@ -35,18 +34,22 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(inlineDocumentType));
             }
+
             if (!typeof(InlineCategoriesDocument).IsAssignableFrom(inlineDocumentType))
             {
                 throw new ArgumentException(String.Format(SR.InvalidObjectTypePassed, nameof(inlineDocumentType), nameof(InlineCategoriesDocument)));
             }
+
             if (referencedDocumentType == null)
             {
                 throw new ArgumentNullException(nameof(referencedDocumentType));
             }
+
             if (!typeof(ReferencedCategoriesDocument).IsAssignableFrom(referencedDocumentType))
             {
                 throw new ArgumentException(String.Format(SR.InvalidObjectTypePassed, nameof(referencedDocumentType), nameof(ReferencedCategoriesDocument)));
             }
+
             _maxExtensionSize = int.MaxValue;
             _preserveAttributeExtensions = true;
             _preserveElementExtensions = true;
@@ -78,46 +81,51 @@ namespace Microsoft.ServiceModel.Syndication
             get { return App10Constants.Namespace; }
         }
 
-        public override async Task<bool> CanReadAsync(XmlReader reader)
+        public override Task<bool> CanReadAsync(XmlReader reader)
         {            
             if (reader == null)
             {
                 throw new ArgumentNullException(nameof(reader));
             }
+
             XmlReaderWrapper wrappedReader = XmlReaderWrapper.CreateFromReader(reader);
-            return await wrappedReader.IsStartElementAsync(App10Constants.Categories, App10Constants.Namespace);
+            return wrappedReader.IsStartElementAsync(App10Constants.Categories, App10Constants.Namespace);
         }
 
         
 
-        async Task ReadXmlAsync(XmlReaderWrapper reader)
+        Task ReadXmlAsync(XmlReaderWrapper reader)
         {
             if (reader == null)
             {
                 throw new ArgumentNullException(nameof(reader));
             }
-            await ReadDocumentAsync(reader);
+
+            return ReadDocumentAsync(reader);
         }
 
-        async Task WriteXml(XmlWriter writer)
+        Task WriteXmlAsync(XmlWriter writer)
         {
             if (writer == null)
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (this.Document == null)
             {
                 throw new InvalidOperationException(SR.DocumentFormatterDoesNotHaveDocument);
             }
-            await WriteDocumentAsync(writer);
+
+            return WriteDocumentAsync(writer);
         }
 
-        public override async Task ReadFrom(XmlReader reader)
+        public override async Task ReadFromAsync(XmlReader reader)
         {
             if (reader == null)
             {
                 throw new ArgumentNullException(nameof(reader));
             }
+
             if (!await CanReadAsync(reader))
             {
                 throw new XmlException(String.Format(SR.UnknownDocumentXml, reader.LocalName, reader.NamespaceURI));
@@ -132,10 +140,12 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (this.Document == null)
             {
                 throw new InvalidOperationException(SR.DocumentFormatterDoesNotHaveDocument);
             }
+
             writer.WriteStartElement(App10Constants.Prefix, App10Constants.Categories, App10Constants.Namespace);
             await WriteDocumentAsync(writer);
             writer.WriteEndElement();
@@ -170,7 +180,7 @@ namespace Microsoft.ServiceModel.Syndication
             try
             {
                 await SyndicationFeedFormatter.MoveToStartElementAsync(reader);
-                SetDocument(AtomPub10ServiceDocumentFormatter.ReadCategories(reader, null,
+                SetDocument(await AtomPub10ServiceDocumentFormatter.ReadCategories(reader, null,
                     delegate ()
                     {
                         return this.CreateInlineCategoriesDocument();
@@ -183,7 +193,7 @@ namespace Microsoft.ServiceModel.Syndication
                     this.Version,
                     _preserveElementExtensions,
                     _preserveAttributeExtensions,
-                    _maxExtensionSize).Result);
+                    _maxExtensionSize));
             }
             catch (FormatException e)
             {
@@ -195,11 +205,11 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-        private async Task WriteDocumentAsync(XmlWriter writer)
+        private  Task WriteDocumentAsync(XmlWriter writer)
         {
             // declare the atom10 namespace upfront for compactness
             writer.WriteAttributeString(Atom10Constants.Atom10Prefix, Atom10FeedFormatter.XmlNsNs, Atom10Constants.Atom10Namespace);
-            await AtomPub10ServiceDocumentFormatter.WriteCategoriesInnerXml(writer, this.Document, null, this.Version);
+            return AtomPub10ServiceDocumentFormatter.WriteCategoriesInnerXml(writer, this.Document, null, this.Version);
         }
     }
 }
index b343b13..01e78f2 100644 (file)
@@ -62,7 +62,7 @@ namespace Microsoft.ServiceModel.Syndication
             get { return App10Constants.Namespace; }
         }
 
-        public override async Task<bool> CanReadAsync(XmlReader reader)
+        public override Task<bool> CanReadAsync(XmlReader reader)
         {
             if (reader == null)
             {
@@ -70,29 +70,32 @@ namespace Microsoft.ServiceModel.Syndication
             }
 
             XmlReaderWrapper readerWrapper = XmlReaderWrapper.CreateFromReader(reader);
-            return await readerWrapper.IsStartElementAsync(App10Constants.Service, App10Constants.Namespace);
+            return readerWrapper.IsStartElementAsync(App10Constants.Service, App10Constants.Namespace);
         }
 
-        async Task ReadXml(XmlReaderWrapper reader)
+        Task ReadXml(XmlReaderWrapper reader)
         {
             if (reader == null)
             {
                 throw new ArgumentNullException(nameof(reader));
             }
-            await ReadDocumentAsync(reader);
+
+            return ReadDocumentAsync(reader);
         }
 
-        async Task WriteXml(XmlWriter writer)
+        Task WriteXml(XmlWriter writer)
         {
             if (writer == null)
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (this.Document == null)
             {
                 throw new InvalidOperationException(SR.DocumentFormatterDoesNotHaveDocument);
             }
-            await WriteDocumentAsync(XmlWriterWrapper.CreateFromWriter(writer));
+
+            return WriteDocumentAsync(XmlWriterWrapper.CreateFromWriter(writer));
         }
 
         public override async Task ReadFromAsync(XmlReader reader)
@@ -119,6 +122,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (this.Document == null)
             {
                 throw new InvalidOperationException(SR.DocumentFormatterDoesNotHaveDocument);
@@ -157,10 +161,12 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 WriteXmlBase(writer, baseUriToWrite);
             }
+
             if (!string.IsNullOrEmpty(categories.Language))
             {
                 WriteXmlLang(writer, categories.Language);
             }
+
             if (categories.IsInline)
             {
                 await WriteInlineCategoriesContentAsync(XmlWriterWrapper.CreateFromWriter(writer), (InlineCategoriesDocument)categories, version);
@@ -183,7 +189,7 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
         
-        private static async Task ReadInlineCategoriesAsync(XmlReaderWrapper reader, InlineCategoriesDocument inlineCategories, Uri baseUri, string version, bool preserveElementExtensions, bool preserveAttributeExtensions, int maxExtensionSize)
+        private static async Task ReadInlineCategoriesAsync(XmlReaderWrapper reader, InlineCategoriesDocument inlineCategories, Uri baseUri, string version, bool preserveElementExtensions, bool preserveAttributeExtensions, int _maxExtensionSize)
         {
             inlineCategories.BaseUri = baseUri;
             if (reader.HasAttributes)
@@ -192,11 +198,11 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        inlineCategories.BaseUri = FeedUtils.CombineXmlBase(inlineCategories.BaseUri, reader.Value);
+                        inlineCategories.BaseUri = FeedUtils.CombineXmlBase(inlineCategories.BaseUri, await reader.GetValueAsync());
                     }
                     else if (reader.LocalName == "lang" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        inlineCategories.Language = reader.Value;
+                        inlineCategories.Language = await reader.GetValueAsync();
                     }
                     else if (reader.LocalName == App10Constants.Fixed && reader.NamespaceURI == string.Empty)
                     {
@@ -204,7 +210,7 @@ namespace Microsoft.ServiceModel.Syndication
                     }
                     else if (reader.LocalName == Atom10Constants.SchemeTag && reader.NamespaceURI == string.Empty)
                     {
-                        inlineCategories.Scheme = reader.Value;
+                        inlineCategories.Scheme = await reader.GetValueAsync();
                     }
                     else
                     {
@@ -214,20 +220,21 @@ namespace Microsoft.ServiceModel.Syndication
                         {
                             continue;
                         }
-                        string val = reader.Value;
+                        string val = await reader.GetValueAsync();
                         if (!TryParseAttribute(name, ns, val, inlineCategories, version))
                         {
                             if (preserveAttributeExtensions)
                             {
-                                inlineCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
+                                inlineCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), await reader.GetValueAsync());
                             }
                         }
                     }
                 }
             }
+
             await SyndicationFeedFormatter.MoveToStartElementAsync(reader);
             bool isEmptyElement = reader.IsEmptyElement;
-            reader.ReadStartElement();
+            await reader.ReadStartElementAsync();
             if (!isEmptyElement)
             {
                 XmlBuffer buffer = null;
@@ -239,25 +246,21 @@ namespace Microsoft.ServiceModel.Syndication
                         if (reader.IsStartElement(Atom10Constants.CategoryTag, Atom10Constants.Atom10Namespace))
                         {
                             SyndicationCategory category = CreateCategory(inlineCategories);
-                            await Atom10FeedFormatter.ReadCategoryAsync(reader, category, version, preserveAttributeExtensions, preserveElementExtensions, maxExtensionSize);
+                            await Atom10FeedFormatter.ReadCategoryAsync(reader, category, version, preserveAttributeExtensions, preserveElementExtensions, _maxExtensionSize);
                             if (category.Scheme == null)
                             {
                                 category.Scheme = inlineCategories.Scheme;
                             }
+
                             inlineCategories.Categories.Add(category);
                         }
                         else if (!TryParseElement(reader, inlineCategories, version))
                         {
                             if (preserveElementExtensions)
                             {
-                                if (buffer == null)
-                                {
-                                    buffer = new XmlBuffer(maxExtensionSize);
-                                    extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
-                                    extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
-                                }
-
-                                await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
+                                var tuple = await SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, _maxExtensionSize);
+                                buffer = tuple.Item1;
+                                extWriter = tuple.Item2;
                             }
                             else
                             {
@@ -274,7 +277,8 @@ namespace Microsoft.ServiceModel.Syndication
                         extWriter.Close();
                     }
                 }
-                reader.ReadEndElement();
+
+                await reader.ReadEndElementAsync();
             }
         }
         
@@ -288,11 +292,11 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        referencedCategories.BaseUri = FeedUtils.CombineXmlBase(referencedCategories.BaseUri, reader.Value);
+                        referencedCategories.BaseUri = FeedUtils.CombineXmlBase(referencedCategories.BaseUri, await reader.GetValueAsync());
                     }
                     else if (reader.LocalName == "lang" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        referencedCategories.Language = reader.Value;
+                        referencedCategories.Language = await reader.GetValueAsync();
                     }
                     else if (reader.LocalName == App10Constants.Href && reader.NamespaceURI == string.Empty)
                     {
@@ -306,43 +310,41 @@ namespace Microsoft.ServiceModel.Syndication
                         {
                             continue;
                         }
-                        string val = reader.Value;
+
+                        string val = await reader.GetValueAsync();
                         if (!TryParseAttribute(name, ns, val, referencedCategories, version))
                         {
                             if (preserveAttributeExtensions)
                             {
-                                referencedCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
+                                referencedCategories.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), await reader.GetValueAsync());
                             }
                         }
                     }
                 }
             }
+
             reader.MoveToElement();
             bool isEmptyElement = reader.IsEmptyElement;
-            reader.ReadStartElement();
+            await reader.ReadStartElementAsync();
             if (!isEmptyElement)
             {
                 XmlBuffer buffer = null;
                 XmlDictionaryWriter extWriter = null;
                 try
                 {
-                    while (reader.IsStartElement())
+                    while (await reader.IsStartElementAsync())
                     {
                         if (!TryParseElement(reader, referencedCategories, version))
                         {
                             if (preserveElementExtensions)
                             {
-                                if (buffer == null)
-                                {
-                                    buffer = new XmlBuffer(maxExtensionSize);
-                                    extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
-                                    extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
-                                }
-
-                                await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
+                                var tuple = await SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, maxExtensionSize);
+                                buffer = tuple.Item1;
+                                extWriter = tuple.Item2;
                             }
                         }
                     }
+
                     LoadElementExtensions(buffer, extWriter, referencedCategories);
                 }
                 finally
@@ -352,7 +354,8 @@ namespace Microsoft.ServiceModel.Syndication
                         extWriter.Close();
                     }
                 }
-                reader.ReadEndElement();
+
+                await reader.ReadEndElementAsync();
             }
         }
         
@@ -375,12 +378,14 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 await writer.WriteAttributeStringAsync(App10Constants.Fixed, "yes");
             }
+
             WriteAttributeExtensions(writer, categories, version);
 
             for (int i = 0; i < categories.Categories.Count; ++i)
             {
                 await Atom10FeedFormatter.WriteCategoryAsync(wrappedWriter, categories.Categories[i], version);
             }
+
             WriteElementExtensions(writer, categories, version);
         }
 
@@ -390,6 +395,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 writer.WriteAttributeString(App10Constants.Href, FeedUtils.GetUriString(categories.Link));
             }
+
             WriteAttributeExtensions(writer, categories, version);
             WriteElementExtensions(writer, categories, version);
         }
@@ -414,11 +420,11 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, reader.Value);
+                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, await reader.GetValueAsync());
                     }
                     else if (reader.LocalName == App10Constants.Href && reader.NamespaceURI == string.Empty)
                     {
-                        result.Link = new Uri(reader.Value, UriKind.RelativeOrAbsolute);
+                        result.Link = new Uri(await reader.GetValueAsync(), UriKind.RelativeOrAbsolute);
                     }
                     else
                     {
@@ -428,12 +434,13 @@ namespace Microsoft.ServiceModel.Syndication
                         {
                             continue;
                         }
-                        string val = reader.Value;
+
+                        string val = await reader.GetValueAsync();
                         if (!TryParseAttribute(name, ns, val, result, this.Version))
                         {
                             if (_preserveAttributeExtensions)
                             {
-                                result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
+                                result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), val);
                             }
                         }
                     }
@@ -454,7 +461,7 @@ namespace Microsoft.ServiceModel.Syndication
                     }
                     else if (reader.IsStartElement(App10Constants.Categories, App10Constants.Namespace))
                     {
-                        result.Categories.Add(ReadCategories(reader,
+                        result.Categories.Add(await ReadCategories(reader,
                             result.BaseUri,
                             delegate ()
                             {
@@ -468,7 +475,7 @@ namespace Microsoft.ServiceModel.Syndication
                             this.Version,
                             _preserveElementExtensions,
                             _preserveAttributeExtensions,
-                            _maxExtensionSize).Result);
+                            _maxExtensionSize));
                     }
                     else if (reader.IsStartElement(App10Constants.Accept, App10Constants.Namespace))
                     {
@@ -493,6 +500,7 @@ namespace Microsoft.ServiceModel.Syndication
                         }
                     }
                 }
+
                 LoadElementExtensions(buffer, extWriter, result);
             }
             finally
@@ -502,6 +510,7 @@ namespace Microsoft.ServiceModel.Syndication
                     extWriter.Close();
                 }
             }
+
             reader.ReadEndElement();
             return result;
         }
@@ -519,11 +528,11 @@ namespace Microsoft.ServiceModel.Syndication
                     {
                         if (reader.LocalName == "lang" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                         {
-                            result.Language = reader.Value;
+                            result.Language = await reader.GetValueAsync();
                         }
                         else if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                         {
-                            result.BaseUri = new Uri(reader.Value, UriKind.RelativeOrAbsolute);
+                            result.BaseUri = new Uri(await reader.GetValueAsync(), UriKind.RelativeOrAbsolute);
                         }
                         else
                         {
@@ -533,12 +542,13 @@ namespace Microsoft.ServiceModel.Syndication
                             {
                                 continue;
                             }
-                            string val = reader.Value;
+
+                            string val = await reader.GetValueAsync();
                             if (!TryParseAttribute(name, ns, val, result, this.Version))
                             {
                                 if (_preserveAttributeExtensions)
                                 {
-                                    result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
+                                    result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), val);
                                 }
                             }
                         }
@@ -547,7 +557,7 @@ namespace Microsoft.ServiceModel.Syndication
                 XmlBuffer buffer = null;
                 XmlDictionaryWriter extWriter = null;
 
-                reader.ReadStartElement();
+                await reader.ReadStartElementAsync();
                 if (!elementIsEmpty)
                 {
                     try
@@ -562,14 +572,9 @@ namespace Microsoft.ServiceModel.Syndication
                             {
                                 if (_preserveElementExtensions)
                                 {
-                                    if (buffer == null)
-                                    {
-                                        buffer = new XmlBuffer(_maxExtensionSize);
-                                        extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
-                                        extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
-                                    }
-
-                                    await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
+                                    var tuple = await SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, _maxExtensionSize);
+                                    buffer = tuple.Item1;
+                                    extWriter = tuple.Item2;
                                 }
                                 else
                                 {
@@ -577,6 +582,7 @@ namespace Microsoft.ServiceModel.Syndication
                                 }
                             }
                         }
+
                         LoadElementExtensions(buffer, extWriter, result);
                     }
                     finally
@@ -587,7 +593,8 @@ namespace Microsoft.ServiceModel.Syndication
                         }
                     }
                 }
-                reader.ReadEndElement();
+
+                await reader.ReadEndElementAsync();
             }
             catch (FormatException e)
             {
@@ -597,6 +604,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 new XmlException(FeedUtils.AddLineInfo(reader, SR.ErrorParsingDocument), e);
             }
+
             SetDocument(result);
         }
         
@@ -610,7 +618,7 @@ namespace Microsoft.ServiceModel.Syndication
                 {
                     if (reader.LocalName == "base" && reader.NamespaceURI == Atom10FeedFormatter.XmlNs)
                     {
-                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, reader.Value);
+                        result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri,await reader.GetValueAsync());
                     }
                     else
                     {
@@ -620,12 +628,13 @@ namespace Microsoft.ServiceModel.Syndication
                         {
                             continue;
                         }
-                        string val = reader.Value;
+
+                        string val = await reader.GetValueAsync();
                         if (!TryParseAttribute(name, ns, val, result, this.Version))
                         {
                             if (_preserveAttributeExtensions)
                             {
-                                result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
+                                result.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), val);
                             }
                         }
                     }
@@ -633,9 +642,8 @@ namespace Microsoft.ServiceModel.Syndication
             }
 
             XmlBuffer buffer = null;
-            XmlDictionaryWriter extWriter = null;
-
-            reader.ReadStartElement();
+            XmlDictionaryWriter extWriter = null; 
+            await reader.ReadStartElementAsync();
             try
             {
                 while (reader.IsStartElement())
@@ -652,14 +660,9 @@ namespace Microsoft.ServiceModel.Syndication
                     {
                         if (_preserveElementExtensions)
                         {
-                            if (buffer == null)
-                            {
-                                buffer = new XmlBuffer(_maxExtensionSize);
-                                extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
-                                extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
-                            }
-
-                            await XmlReaderWrapper.WriteNodeAsync(extWriter, reader, false);
+                            var tuple = await SyndicationFeedFormatter.CreateBufferIfRequiredAndWriteNodeAsync(buffer, extWriter, reader, _maxExtensionSize);
+                            buffer = tuple.Item1;
+                            extWriter = tuple.Item2;
                         }
                         else
                         {
@@ -667,6 +670,7 @@ namespace Microsoft.ServiceModel.Syndication
                         }
                     }
                 }
+
                 LoadElementExtensions(buffer, extWriter, result);
             }
             finally
@@ -676,7 +680,8 @@ namespace Microsoft.ServiceModel.Syndication
                     extWriter.Close();
                 }
             }
-            reader.ReadEndElement();
+
+            await reader.ReadEndElementAsync();
             return result;
         }
         
@@ -689,23 +694,28 @@ namespace Microsoft.ServiceModel.Syndication
                 baseUri = collection.BaseUri;
                 WriteXmlBase(writer, baseUriToWrite);
             }
+
             if (collection.Link != null)
             {
                 await writer.WriteAttributeStringAsync(App10Constants.Href, FeedUtils.GetUriString(collection.Link));
             }
+
             WriteAttributeExtensions(writer, collection, this.Version);
             if (collection.Title != null)
             {
                 collection.Title.WriteTo(writer, Atom10Constants.TitleTag, Atom10Constants.Atom10Namespace);
             }
+
             for (int i = 0; i < collection.Accepts.Count; ++i)
             {
                 await writer.WriteElementStringAsync(App10Constants.Prefix, App10Constants.Accept, App10Constants.Namespace, collection.Accepts[i]);
             }
+
             for (int i = 0; i < collection.Categories.Count; ++i)
             {
                 await WriteCategoriesAsync(writer, collection.Categories[i], baseUri, this.Version);
             }
+
             WriteElementExtensions(writer, collection, this.Version);
             await writer.WriteEndElementAsync();
         }
@@ -718,17 +728,20 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 WriteXmlLang(writer, this.Document.Language);
             }
+
             Uri baseUri = this.Document.BaseUri;
             if (baseUri != null)
             {
                 WriteXmlBase(writer, baseUri);
             }
+
             WriteAttributeExtensions(writer, this.Document, this.Version);
 
             for (int i = 0; i < this.Document.Workspaces.Count; ++i)
             {
                 await WriteWorkspaceAsync(writer, this.Document.Workspaces[i], baseUri);
             }
+
             WriteElementExtensions(writer, this.Document, this.Version);
         }
         
@@ -741,21 +754,23 @@ namespace Microsoft.ServiceModel.Syndication
                 baseUri = workspace.BaseUri;
                 WriteXmlBase(writer, baseUriToWrite);
             }
+
             WriteAttributeExtensions(writer, workspace, this.Version);
             if (workspace.Title != null)
             {
                 workspace.Title.WriteTo(writer, Atom10Constants.TitleTag, Atom10Constants.Atom10Namespace);
             }
+
             for (int i = 0; i < workspace.Collections.Count; ++i)
             {
                 await WriteCollectionAsync(writer, workspace.Collections[i], baseUri);
             }
+
             WriteElementExtensions(writer, workspace, this.Version);
             await writer.WriteEndElementAsync();
         }
     }
 
-    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
     [XmlRoot(ElementName = App10Constants.Service, Namespace = App10Constants.Namespace)]
     public class AtomPub10ServiceDocumentFormatter<TServiceDocument> : AtomPub10ServiceDocumentFormatter
         where TServiceDocument : ServiceDocument, new()
index 52f5232..76d684a 100644 (file)
@@ -11,7 +11,6 @@ namespace Microsoft.ServiceModel.Syndication
     using System.Threading.Tasks;
     using System.Xml;
 
-    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
     public abstract class CategoriesDocument : IExtensibleSyndicationObject
     {
         private Uri _baseUri;
@@ -70,10 +69,10 @@ namespace Microsoft.ServiceModel.Syndication
             return new ReferencedCategoriesDocument(linkToCategoriesDocument);
         }
 
-        public static async Task<CategoriesDocument> Load(XmlReader reader)
+        public static async Task<CategoriesDocument> LoadAsync(XmlReader reader)
         {
             AtomPub10CategoriesDocumentFormatter formatter = new AtomPub10CategoriesDocumentFormatter();
-            await formatter.ReadFrom(reader);
+            await formatter.ReadFromAsync(reader);
             return formatter.Document;
         }
 
index d67e656..76a3e02 100644 (file)
@@ -35,7 +35,7 @@ namespace Microsoft.ServiceModel.Syndication
         { get; }
 
         public abstract Task<bool> CanReadAsync(XmlReader reader);
-        public abstract Task ReadFrom(XmlReader reader);
+        public abstract Task ReadFromAsync(XmlReader reader);
         public abstract Task WriteTo(XmlWriter writer);
 
         protected virtual InlineCategoriesDocument CreateInlineCategoriesDocument()
index 509e8bb..1d42627 100644 (file)
@@ -86,6 +86,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(readerOverUnparsedExtensions));
             }
+
             if (maxExtensionSize < 0)
             {
                 throw new ArgumentOutOfRangeException(nameof(maxExtensionSize));
@@ -106,6 +107,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (_attributeExtensions != null)
             {
                 foreach (XmlQualifiedName qname in _attributeExtensions.Keys)
@@ -122,6 +124,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 throw new ArgumentNullException(nameof(writer));
             }
+
             if (_elementExtensions != null)
             {
                 _elementExtensions.WriteTo(writer);
index 4a7ebc4..8eea72b 100644 (file)
@@ -1,5 +1,6 @@
 NoIPEndpointsFoundForHost=No IPEndpoints were found for host {0}.
 DnsResolveFailed=No DNS entries exist for host {0}.
+InvalidSkipHours=The hour can't be lower than 0 or greater than 23
 RequiredAttributeMissing=Attribute '{0}' is required on element '{1}'.
 UnsupportedCryptoAlgorithm=Crypto algorithm {0} not supported in this context.
 CustomCryptoAlgorithmIsNotValidHashAlgorithm=The custom crypto algorithm '{0}' obtained using CryptoConfig is not a valid or supported hash algorithm.
index 5002810..82b1cee 100644 (file)
@@ -9,6 +9,7 @@ namespace Microsoft.ServiceModel.Syndication
     using Microsoft.ServiceModel.Syndication.Resources;
     using System;
     using System.Collections.Generic;
+    using System.Diagnostics;
     using System.Diagnostics.CodeAnalysis;
     using System.Globalization;
     using System.Text;
@@ -36,32 +37,21 @@ namespace Microsoft.ServiceModel.Syndication
         private bool _serializeExtensionsAsAtom;
 
         //Custom Parsers
-
         //   value, localname , ns , result
-        public Func<string, string, string, string> stringParser;
-        public Func<string, string, string, DateTimeOffset> dateParser;
-        public Func<string, string, string, Uri> uriParser;
-        /*
-         * title
-         * link
-         * description
-         * language
-         * date
-         * 
-         */
-
-        private string StringParserAction(string value, string localName, string ns)
+        public Func<string, string, string, string> StringParser { get; set; } = DefaultStringParser;
+        public Func<string, string, string, DateTimeOffset> DateParser { get; set; } = DefaultDateParser;
+        public Func<string, string, string, Uri> UriParser { get; set; } = DefaultUriParser;
+
+        static private string DefaultStringParser(string value, string localName, string ns)
         {
             return value;
         }
 
-        private Uri UriParserAction(string value, string localName, string ns)
+        static private Uri DefaultUriParser(string value, string localName, string ns)
         {
-            return new Uri(value);
+            return new Uri(value, UriKind.RelativeOrAbsolute);
         }
 
-        
-
         private async Task<bool> OnReadImage(XmlReaderWrapper reader, SyndicationFeed result)
         {
             await reader.ReadStartElementAsync();
@@ -69,38 +59,24 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 if (await reader.IsStartElementAsync(Rss20Constants.UrlTag, Rss20Constants.Rss20Namespace))
                 {
-                    //result.ImageUrl = new Uri(await reader.ReadElementStringAsync(), UriKind.RelativeOrAbsolute);
-                    result.ImageUrl = uriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);
+                    result.ImageUrl = UriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);
                 }
                 else if(await reader.IsStartElementAsync("link",Rss20Constants.Rss20Namespace))
                 {
-                    //result.ImageLink = new Uri(await reader.ReadElementStringAsync(), UriKind.RelativeOrAbsolute);
-                    result.ImageLink = uriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);
+                    result.ImageLink = UriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);
                 }
                 else if (await reader.IsStartElementAsync("title", Rss20Constants.Rss20Namespace))
                 {
-                    //result.ImageTitle = new TextSyndicationContent(await reader.ReadElementStringAsync());
-                    result.ImageTitle = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI));
+                    result.ImageTitle = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI));
                 }
             }
             await reader.ReadEndElementAsync(); // image
             return true;
         }
-        
-
-
-        private void LoadDefaultParsers()
-        {
-            stringParser = StringParserAction;
-            dateParser = DateParserAction;
-            uriParser = UriParserAction;
-        }
 
         public Rss20FeedFormatter()
             : this(typeof(SyndicationFeed))
         {
-            //Setting default parsers
-            LoadDefaultParsers();
         }
 
         public Rss20FeedFormatter(Type feedTypeToCreate)
@@ -120,8 +96,6 @@ namespace Microsoft.ServiceModel.Syndication
             _preserveAttributeExtensions = true;
             _atomSerializer = new Atom10FeedFormatter(feedTypeToCreate);
             _feedType = feedTypeToCreate;
-
-            LoadDefaultParsers();
         }
 
         public Rss20FeedFormatter(SyndicationFeed feedToWrite)
@@ -182,7 +156,7 @@ namespace Microsoft.ServiceModel.Syndication
             return reader.IsStartElement(Rss20Constants.RssTag, Rss20Constants.Rss20Namespace);
         }
 
-        public override async Task ReadFromAsync(XmlReader reader)
+        public override Task ReadFromAsync(XmlReader reader)
         {
             if (!CanRead(reader))
             {
@@ -190,20 +164,20 @@ namespace Microsoft.ServiceModel.Syndication
             }
 
             SetFeed(CreateFeedInstance());
-            await ReadXmlAsync(XmlReaderWrapper.CreateFromReader(reader), this.Feed);
+            return ReadXmlAsync(XmlReaderWrapper.CreateFromReader(reader), this.Feed);
         }
 
-        async Task WriteXml(XmlWriter writer)
+        private Task WriteXmlAsync(XmlWriter writer)
         {
             if (writer == null)
             {
                 throw new ArgumentNullException(nameof(writer));
             }
 
-            await WriteFeedAsync(XmlWriterWrapper.CreateFromWriter( writer) );
+            return WriteFeedAsync(XmlWriterWrapper.CreateFromWriter( writer) );
         }
 
-        public override async Task WriteTo(XmlWriter writer)
+        public override async Task WriteToAsync(XmlWriter writer)
         {
             if (writer == null)
             {
@@ -223,7 +197,7 @@ namespace Microsoft.ServiceModel.Syndication
             _atomSerializer.SetFeed(this.Feed);
         }
 
-        async Task ReadItemFromAsync(XmlReaderWrapper reader, SyndicationItem result, Uri feedBaseUri)
+        private async Task ReadItemFromAsync(XmlReaderWrapper reader, SyndicationItem result, Uri feedBaseUri)
         {
             result.BaseUri = feedBaseUri;
             await reader.MoveToContentAsync();
@@ -239,10 +213,12 @@ namespace Microsoft.ServiceModel.Syndication
                         result.BaseUri = FeedUtils.CombineXmlBase(result.BaseUri, await reader.GetValueAsync());
                         continue;
                     }
+
                     if (FeedUtils.IsXmlns(name, ns) || FeedUtils.IsXmlSchemaType(name, ns))
                     {
                         continue;
                     }
+
                     string val = await reader.GetValueAsync();
                     if (!TryParseAttribute(name, ns, val, result, this.Version))
                     {
@@ -272,8 +248,7 @@ namespace Microsoft.ServiceModel.Syndication
                             switch (reader.LocalName)
                             {
                                 case Rss20Constants.TitleTag:
-                                    //result.Title = new TextSyndicationContent(await reader.ReadElementStringAsync());
-                                    result.Title = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(),reader.LocalName,reader.NamespaceURI));
+                                    result.Title = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(),reader.LocalName,reader.NamespaceURI));
                                     break;
 
                                 case Rss20Constants.LinkTag:
@@ -282,8 +257,7 @@ namespace Microsoft.ServiceModel.Syndication
                                     break;
 
                                 case Rss20Constants.DescriptionTag:
-                                    //result.Summary = new TextSyndicationContent(await reader.ReadElementStringAsync());
-                                    result.Summary = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI));
+                                    result.Summary = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI));
                                     break;
 
                                 case Rss20Constants.AuthorTag:
@@ -296,7 +270,6 @@ namespace Microsoft.ServiceModel.Syndication
 
                                 case Rss20Constants.EnclosureTag:
                                     result.Links.Add(await ReadMediaEnclosureAsync(reader, result.BaseUri));
-
                                     break;
 
                                 case Rss20Constants.GuidTag:
@@ -308,7 +281,7 @@ namespace Microsoft.ServiceModel.Syndication
                                             isPermalink = false;
                                         }
 
-                                        result.Id = stringParser(await reader.ReadElementStringAsync(),reader.LocalName,reader.NamespaceURI);//await reader.ReadElementStringAsync();
+                                        result.Id = StringParser(await reader.ReadElementStringAsync(),reader.LocalName,reader.NamespaceURI);
                                         if (isPermalink)
                                         {
                                             fallbackAlternateLink = result.Id;
@@ -326,7 +299,7 @@ namespace Microsoft.ServiceModel.Syndication
                                             string str = await reader.ReadStringAsync();
                                             if (!string.IsNullOrEmpty(str))
                                             {
-                                                result.PublishDate = dateParser(str, reader.LocalName, reader.NamespaceURI);
+                                                result.PublishDate = DateParser(str, reader.LocalName, reader.NamespaceURI);
                                             }
 
                                             await reader.ReadEndElementAsync();
@@ -351,7 +324,7 @@ namespace Microsoft.ServiceModel.Syndication
                                                 string val = await reader.GetValueAsync();
                                                 if (name == Rss20Constants.UrlTag && ns == Rss20Constants.Rss20Namespace)
                                                 {
-                                                    feed.Links.Add(SyndicationLink.CreateSelfLink(new Uri(val, UriKind.RelativeOrAbsolute)));
+                                                    feed.Links.Add(SyndicationLink.CreateSelfLink(UriParser(val, Rss20Constants.UrlTag,ns)));
                                                 }
                                                 else if (!FeedUtils.IsXmlns(name, ns))
                                                 {
@@ -362,7 +335,7 @@ namespace Microsoft.ServiceModel.Syndication
                                                 }
                                             }
                                         }
-                                        string feedTitle = stringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI); //await reader.ReadElementStringAsync();
+                                        string feedTitle = StringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI); //await reader.ReadElementStringAsync();
                                         feed.Title = new TextSyndicationContent(feedTitle);
                                         result.SourceFeed = feed;
 
@@ -436,15 +409,15 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
 
-        internal async Task ReadItemFromAsync(XmlReaderWrapper reader, SyndicationItem result)
+        internal Task ReadItemFromAsync(XmlReaderWrapper reader, SyndicationItem result)
         {
-            await ReadItemFromAsync(reader, result, null);
+            return ReadItemFromAsync(reader, result, null);
         }
 
-        internal async Task WriteItemContentsAsync(XmlWriter writer, SyndicationItem item)
+        internal Task WriteItemContentsAsync(XmlWriter writer, SyndicationItem item)
         {
             XmlWriterWrapper writerWrapped = XmlWriterWrapper.CreateFromWriter(writer);
-            await WriteItemContentsAsync(writerWrapped, item, null);
+            return WriteItemContentsAsync(writerWrapped, item, null);
         }
 
         protected override SyndicationFeed CreateFeedInstance()
@@ -584,12 +557,12 @@ namespace Microsoft.ServiceModel.Syndication
 
                 if(reader.LocalName == Rss20Constants.HourTag)
                 {
-                    string val = stringParser(await reader.ReadElementStringAsync(), Rss20Constants.HourTag, Rss20Constants.Rss20Namespace);
+                    string val = StringParser(await reader.ReadElementStringAsync(), Rss20Constants.HourTag, Rss20Constants.Rss20Namespace);
                     int hour = int.Parse(val);
 
-                    if (hour < 0 || hour > 24)
+                    if (hour < 0 || hour > 23)
                     {
-                        throw new ArgumentException("The hour can't be lower than 0 or greater than 24");
+                        throw new ArgumentException("The hour can't be lower than 0 or greater than 23");
                     }
 
                     result.SkipHours.Add(hour);
@@ -612,7 +585,7 @@ namespace Microsoft.ServiceModel.Syndication
             {
                 if (reader.LocalName == Rss20Constants.DayTag)
                 {
-                    string day = stringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
+                    string day = StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
                     result.SkipDays.Add(day);
                 }
                 else
@@ -624,7 +597,7 @@ namespace Microsoft.ServiceModel.Syndication
             await reader.ReadEndElementAsync();
         }
 
-        public static void RemoveExtraWhiteSpaceAtStart(StringBuilder stringBuilder)
+        internal static void RemoveExtraWhiteSpaceAtStart(StringBuilder stringBuilder)
         {
             int i = 0;
             while (i < stringBuilder.Length)
@@ -641,7 +614,7 @@ namespace Microsoft.ServiceModel.Syndication
             }
         }
        
-        public static void ReplaceMultipleWhiteSpaceWithSingleWhiteSpace(StringBuilder builder)
+        private static void ReplaceMultipleWhiteSpaceWithSingleWhiteSpace(StringBuilder builder)
         {
             int index = 0;
             int whiteSpaceStart = -1;
@@ -669,6 +642,7 @@ namespace Microsoft.ServiceModel.Syndication
                 ++index;
             }
             // we have already trimmed the start and end so there cannot be a trail of white spaces in the end
+            Debug.Assert(builder.Length == 0 || builder[builder.Length - 1] != ' ', "The string builder doesnt end in a white space");
         }
 
         private string AsString(DateTimeOffset dateTime)
@@ -708,19 +682,18 @@ namespace Microsoft.ServiceModel.Syndication
                     }
                 }
             }
-            //string uri = stringParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);
-            link.Uri = uriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);//new Uri(uri, UriKind.RelativeOrAbsolute);
+            link.Uri = UriParser(await reader.ReadElementStringAsync(), reader.LocalName, reader.NamespaceURI);//new Uri(uri, UriKind.RelativeOrAbsolute);
             return link;
         }
         
-        async Task<SyndicationCategory> ReadCategoryAsync(XmlReaderWrapper reader, SyndicationFeed feed)
+        private async Task<SyndicationCategory> ReadCategoryAsync(XmlReaderWrapper reader, SyndicationFeed feed)
         {
             SyndicationCategory result = CreateCategory(feed);
             await ReadCategoryAsync(reader, result);
             return result;
         }
         
-        async Task ReadCategoryAsync(XmlReaderWrapper reader, SyndicationCategory category)
+        private async Task ReadCategoryAsync(XmlReaderWrapper reader, SyndicationCategory category)
         {
             bool isEmpty = reader.IsEmptyElement;
             if (reader.HasAttributes)
@@ -752,20 +725,20 @@ namespace Microsoft.ServiceModel.Syndication
 
             if (!isEmpty)
             {
-                category.Name = stringParser(await reader.ReadStringAsync(), reader.LocalName, reader.NamespaceURI);//await reader.ReadStringAsync();
+                category.Name = StringParser(await reader.ReadStringAsync(), reader.LocalName, reader.NamespaceURI);
                 await reader.ReadEndElementAsync();
             }
         }
         
-        async Task<SyndicationCategory> ReadCategoryAsync(XmlReaderWrapper reader, SyndicationItem item)
+        private async Task<SyndicationCategory> ReadCategoryAsync(XmlReaderWrapper reader, SyndicationItem item)
         {
             SyndicationCategory result = CreateCategory(item);
             await ReadCategoryAsync(reader, result);
             return result;
         }
-        
 
-        async Task<SyndicationLink> ReadMediaEnclosureAsync(XmlReaderWrapper reader, Uri baseUri)
+
+        private async Task<SyndicationLink> ReadMediaEnclosureAsync(XmlReaderWrapper reader, Uri baseUri)
         {
             SyndicationLink link = new SyndicationLink();
             link.BaseUri = baseUri;
@@ -818,15 +791,15 @@ namespace Microsoft.ServiceModel.Syndication
 
             return link;
         }
-        
-        async Task<SyndicationPerson> ReadPersonAsync(XmlReaderWrapper reader, SyndicationFeed feed)
+
+        private async Task<SyndicationPerson> ReadPersonAsync(XmlReaderWrapper reader, SyndicationFeed feed)
         {
             SyndicationPerson result = CreatePerson(feed);
             await ReadPersonAsync(reader, result);
             return result;
         }
-        
-        async Task ReadPersonAsync(XmlReaderWrapper reader, SyndicationPerson person)
+
+        private async Task ReadPersonAsync(XmlReaderWrapper reader, SyndicationPerson person)
         {
             bool isEmpty = reader.IsEmptyElement;
             if (reader.HasAttributes)
@@ -853,20 +826,20 @@ namespace Microsoft.ServiceModel.Syndication
             await reader.ReadStartElementAsync();
             if (!isEmpty)
             {
-                string email = stringParser(await reader.ReadStringAsync(),reader.LocalName,reader.NamespaceURI);// await reader.ReadStringAsync();
+                string email = StringParser(await reader.ReadStringAsync(),reader.LocalName,reader.NamespaceURI);
                 await reader.ReadEndElementAsync();
                 person.Email = email;
             }
         }
-        
-        async Task<SyndicationPerson> ReadPersonAsync(XmlReaderWrapper reader, SyndicationItem item)
+
+        private async Task<SyndicationPerson> ReadPersonAsync(XmlReaderWrapper reader, SyndicationItem item)
         {
             SyndicationPerson result = CreatePerson(item);
             await ReadPersonAsync(reader, result);
             return result;
         }
 
-        bool checkTextInput(SyndicationTextInput textInput)
+        private bool checkTextInput(SyndicationTextInput textInput)
         {
             //All textInput items are required, we check if all items were instantiated.
             return (textInput.Description != null && textInput.title != null && textInput.name != null && textInput.link != null);
@@ -882,7 +855,7 @@ namespace Microsoft.ServiceModel.Syndication
             while (await reader.IsStartElementAsync())
             {
                 string name = reader.LocalName;
-                val = stringParser(await reader.ReadElementStringAsync(), name, Rss20Constants.Rss20Namespace);
+                val = StringParser(await reader.ReadElementStringAsync(), name, Rss20Constants.Rss20Namespace);
 
                 switch (name)
                 {
@@ -895,7 +868,7 @@ namespace Microsoft.ServiceModel.Syndication
                         break;
 
                     case Rss20Constants.LinkTag:
-                        textInput.link = new SyndicationLink(uriParser(val, name, reader.NamespaceURI));
+                        textInput.link = new SyndicationLink(UriParser(val, name, reader.NamespaceURI));
                         break;
 
                     case Rss20Constants.NameTag:
@@ -924,7 +897,7 @@ namespace Microsoft.ServiceModel.Syndication
             string version = reader.GetAttribute(Rss20Constants.VersionTag, Rss20Constants.Rss20Namespace);
             if (version != Rss20Constants.Version)
             {
-                throw new NotSupportedException();
+                throw new NotSupportedException(FeedUtils.AddLineInfo(reader, (String.Format(SR.UnsupportedRssVersion, version))));
             }
 
             if (reader.AttributeCount > 1)
@@ -974,7 +947,6 @@ namespace Microsoft.ServiceModel.Syndication
             }
 
             bool areAllItemsRead = true;
-            //bool readItemsAtLeastOnce = false;
             await reader.ReadStartElementAsync(Rss20Constants.ChannelTag, Rss20Constants.Rss20Namespace);
 
             XmlBuffer buffer = null;
@@ -991,25 +963,23 @@ namespace Microsoft.ServiceModel.Syndication
                         switch (reader.LocalName)
                         {
                             case Rss20Constants.TitleTag:
-                                //result.Title = new TextSyndicationContent(await reader.ReadElementStringAsync());
-                                result.Title = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(),reader.LocalName,Rss20Constants.Rss20Namespace));
+                                result.Title = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace));
                                 break;
 
                             case Rss20Constants.LinkTag:
-                                //string link = 
                                 result.Links.Add(await ReadAlternateLinkAsync(reader, result.BaseUri));
                                 break;
 
                             case Rss20Constants.DescriptionTag:
-                                result.Description = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace));
+                                result.Description = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace));
                                 break;
 
                             case Rss20Constants.LanguageTag:
-                                result.Language = stringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
+                                result.Language = StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
                                 break;
 
                             case Rss20Constants.CopyrightTag:
-                                result.Copyright = new TextSyndicationContent(stringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace));
+                                result.Copyright = new TextSyndicationContent(StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace));
                                 break;
 
                             case Rss20Constants.ManagingEditorTag:
@@ -1026,7 +996,7 @@ namespace Microsoft.ServiceModel.Syndication
 
                                         if (!string.IsNullOrEmpty(str))
                                         {
-                                            result.LastUpdatedTime = dateParser(str, reader.LocalName, reader.NamespaceURI); // DateFromString(str, reader);
+                                            result.LastUpdatedTime = DateParser(str, reader.LocalName, reader.NamespaceURI);
                                         }
 
                                         await reader.ReadEndElementAsync();
@@ -1040,12 +1010,12 @@ namespace Microsoft.ServiceModel.Syndication
                                 break;
 
                             case Rss20Constants.GeneratorTag:
-                                result.Generator = stringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
+                                result.Generator = StringParser(await reader.ReadElementStringAsync(), reader.LocalName, Rss20Constants.Rss20Namespace);
                                 break;
 
                             case Rss20Constants.ImageTag:
                                 {
-                                    await OnReadImage(reader,result);
+                                    await OnReadImage(reader, result);
                                     break;
                                 }
 
@@ -1056,7 +1026,7 @@ namespace Microsoft.ServiceModel.Syndication
                                     {
                                         feedItems.Add(await ReadItemAsync(reader, result));
                                     }
-                                    
+
 
                                     areAllItemsRead = true;
                                     break;
@@ -1064,11 +1034,11 @@ namespace Microsoft.ServiceModel.Syndication
 
                             //Optional tags
                             case Rss20Constants.DocumentationTag:
-                                result.Documentation = await ReadAlternateLinkAsync(reader,result.BaseUri);
+                                result.Documentation = await ReadAlternateLinkAsync(reader, result.BaseUri);
                                 break;
 
                             case Rss20Constants.TimeToLiveTag:
-                                string value = stringParser(await reader.ReadElementStringAsync(), Rss20Constants.TimeToLiveTag, Rss20Constants.Rss20Namespace);
+                                string value = StringParser(await reader.ReadElementStringAsync(), Rss20Constants.TimeToLiveTag, Rss20Constants.Rss20Namespace);
                                 int timeToLive = int.Parse(value);
                                 result.TimeToLive = timeToLive;
                                 break;
@@ -1080,15 +1050,15 @@ namespace Microsoft.ServiceModel.Syndication
                             //    break;
 
                             case Rss20Constants.TextInputTag:
-                                await readTextInputTag(reader,result);
+                                await readTextInputTag(reader, result);
                                 break;
 
                             case Rss20Constants.SkipHoursTag:
-                                await ReadSkipHoursAsync(reader,result);
+                                await ReadSkipHoursAsync(reader, result);
                                 break;
 
                             case Rss20Constants.SkipDaysTag:
-                                await ReadSkipDaysAsync(reader,result);
+                                await ReadSkipDaysAsync(reader, result);
                                 break;
 
                             default:
@@ -1138,7 +1108,15 @@ namespace Microsoft.ServiceModel.Syndication
 
                 //asign all read items to feed items.
                 result.Items = feedItems;
-                LoadElementExtensions(buffer, extWriter, result); 
+                LoadElementExtensions(buffer, extWriter, result);
+            }
+            catch (FormatException e)
+            {
+                throw new XmlException(FeedUtils.AddLineInfo(reader, SR.ErrorParsingFeed), e);
+            }
+            catch (ArgumentException e)
+            {
+                throw new XmlException(FeedUtils.AddLineInfo(reader, SR.ErrorParsingFeed), e);
             }
             finally
             {
@@ -1152,7 +1130,7 @@ namespace Microsoft.ServiceModel.Syndication
                 await reader.ReadEndElementAsync(); // channel   
                 await reader.ReadEndElementAsync(); // rss
             }
-        }        
+        }
 
         private async Task WriteAlternateLinkAsync(XmlWriterWrapper writer, SyndicationLink link, Uri baseUri)
         {
@@ -1281,9 +1259,7 @@ namespace Microsoft.ServiceModel.Syndication
                 await writer.WriteEndElementAsync(); // image
             }
 
-
-            //new optional spec items go here
-
+            //Optional spec items
             //time to live
             if(this.Feed.TimeToLive != 0)
             {
@@ -1329,8 +1305,6 @@ namespace Microsoft.ServiceModel.Syndication
                 await writer.WriteEndElementAsync();
             }
             
-
-            //========================
             if (_serializeExtensionsAsAtom)
             {
                 await _atomSerializer.WriteElementAsync(writer, Atom10Constants.IdTag, this.Feed.Id);
@@ -1561,7 +1535,7 @@ namespace Microsoft.ServiceModel.Syndication
         }
 
         // Custom parsers
-        public DateTimeOffset DateParserAction(string dateTimeString, string localName, string ns)
+        public static DateTimeOffset DefaultDateParser(string dateTimeString, string localName, string ns)
         {
             bool parsed = false;
             //try
index 5fe7edc..543f43e 100644 (file)
@@ -446,12 +446,12 @@ namespace Microsoft.ServiceModel.Syndication
 
         public async Task SaveAsAtom10(XmlWriter writer)
         {
-            await this.GetAtom10Formatter().WriteTo(writer);
+            await this.GetAtom10Formatter().WriteToAsync(writer);
         }
 
         public async Task SaveAsRss20(XmlWriter writer)
         {
-            await this.GetRss20Formatter().WriteTo(writer);
+            await this.GetRss20Formatter().WriteToAsync(writer);
         }
 
         protected internal virtual SyndicationCategory CreateCategory()
index ee31b4e..0e67b53 100644 (file)
@@ -50,7 +50,7 @@ namespace Microsoft.ServiceModel.Syndication
             return String.Format(CultureInfo.CurrentCulture, "{0}, SyndicationVersion={1}", this.GetType(), this.Version);
         }
 
-        public abstract Task WriteTo(XmlWriter writer);
+        public abstract Task WriteToAsync(XmlWriter writer);
 
         internal static protected SyndicationCategory CreateCategory(SyndicationFeed feed)
         {
index cd2678c..96c4294 100644 (file)
@@ -33,7 +33,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
                 Rss20FeedFormatter rssf = new Rss20FeedFormatter(sf);
 
                 // *** EXECUTE *** \\
-                rssf.WriteTo(xmlw).GetAwaiter().GetResult();
+                rssf.WriteToAsync(xmlw).GetAwaiter().GetResult();
                 xmlw.Close();
 
                 // *** VALIDATE *** \\
@@ -62,7 +62,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
                 //Write the same feed that was read.
                 XmlWriter xmlw = XmlWriter.Create(path);
                 Rss20FeedFormatter atomFeed = new Rss20FeedFormatter(sf);
-                atomFeed.WriteTo(xmlw).GetAwaiter().GetResult();
+                atomFeed.WriteToAsync(xmlw).GetAwaiter().GetResult();
                 xmlw.Close();
 
                 // *** VALIDATE *** \\
@@ -101,7 +101,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
                 settingsWriter.Async = true;
                 XmlWriter xmlw = XmlWriter.Create(path,settingsWriter);
                 Rss20FeedFormatter atomFeed = new Rss20FeedFormatter(sf);
-                Task write = atomFeed.WriteTo(xmlw);
+                Task write = atomFeed.WriteToAsync(xmlw);
 
                 Task.WhenAll(write);
 
@@ -133,7 +133,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
                 //Write the same feed that was read.
                 XmlWriter xmlw = XmlWriter.Create(path);
                 Atom10FeedFormatter atomFeed = new Atom10FeedFormatter(sf);
-                atomFeed.WriteTo(xmlw).GetAwaiter().GetResult();
+                atomFeed.WriteToAsync(xmlw).GetAwaiter().GetResult();
                 xmlw.Close();
 
                 // *** VALIDATE *** \\
@@ -168,7 +168,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
 
                 XmlWriter xmlw = XmlWriter.Create(path,writerSettings);
                 Atom10FeedFormatter atomFeed = new Atom10FeedFormatter(sf);
-                Task write = atomFeed.WriteTo(xmlw);
+                Task write = atomFeed.WriteToAsync(xmlw);
 
                 Task.WhenAll(write);
                 xmlw.Close();
@@ -228,12 +228,12 @@ namespace Microsoft.ServiceModel.Syndication.Tests
 
 
                 // *** EXECUTE *** \\
-                Task rss = rssff.WriteTo(xmlwRss);
+                Task rss = rssff.WriteToAsync(xmlwRss);
                 Task.WaitAll(rss);
 
                 xmlwRss.Close();
 
-                atomf.WriteTo(xmlwAtom).GetAwaiter().GetResult(); ;
+                atomf.WriteToAsync(xmlwAtom).GetAwaiter().GetResult(); ;
                 xmlwAtom.Close();
 
                 // *** ASSERT *** \\
@@ -285,7 +285,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
             try
             {
                 // *** EXECUTE *** \\
-                rssff.WriteTo(writer).GetAwaiter().GetResult(); ;
+                rssff.WriteToAsync(writer).GetAwaiter().GetResult(); ;
                 writer.Close();
 
                 // *** ASSERT *** \\
@@ -570,7 +570,7 @@ namespace Microsoft.ServiceModel.Syndication.Tests
             // *** SETUP *** \\
             Rss20FeedFormatter rssformatter = new Rss20FeedFormatter();
 
-            rssformatter.stringParser = (val, name, ns) =>
+            rssformatter.StringParser = (val, name, ns) =>
             {
                 switch (name)
                 {