DiscoveryDocument.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. //
  2. // System.Web.Services.Protocols.DiscoveryDocument.cs
  3. //
  4. // Author:
  5. // Dave Bettin ([email protected])
  6. // Tim Coleman ([email protected])
  7. // Lluis Sanchez Gual ([email protected])
  8. //
  9. // Copyright (C) Dave Bettin, 2002
  10. // Copyright (C) Tim Coleman, 2002
  11. //
  12. using System.Collections;
  13. using System.IO;
  14. using System.Xml;
  15. using System.Xml.Serialization;
  16. namespace System.Web.Services.Discovery {
  17. [XmlRoot ("discovery", Namespace = "http://schemas.xmlsoap.org/disco/")]
  18. public sealed class DiscoveryDocument {
  19. #region Fields
  20. public const string Namespace = "http://schemas.xmlsoap.org/disco/";
  21. [XmlElement(typeof(ContractReference), Namespace="http://schemas.xmlsoap.org/disco/scl/")]
  22. [XmlElement(typeof(DiscoveryDocumentReference))]
  23. [XmlElement(typeof(SchemaReference))]
  24. internal ArrayList references = new ArrayList();
  25. #endregion // Fields
  26. #region Constructors
  27. public DiscoveryDocument ()
  28. {
  29. }
  30. #endregion // Constructors
  31. #region Properties
  32. [XmlIgnore]
  33. public IList References {
  34. get { return references; }
  35. }
  36. #endregion // Properties
  37. #region Methods
  38. public static bool CanRead (XmlReader xmlReader)
  39. {
  40. xmlReader.MoveToContent ();
  41. return xmlReader.NodeType == XmlNodeType.Element &&
  42. xmlReader.LocalName == "discovery" &&
  43. xmlReader.NamespaceURI == Namespace;
  44. }
  45. public static DiscoveryDocument Read (Stream stream)
  46. {
  47. return Read (new XmlTextReader (stream));
  48. }
  49. public static DiscoveryDocument Read (TextReader textReader)
  50. {
  51. return Read (new XmlTextReader (textReader));
  52. }
  53. public static DiscoveryDocument Read (XmlReader xmlReader)
  54. {
  55. DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer();
  56. return (DiscoveryDocument) ser.Deserialize (xmlReader);
  57. }
  58. public void Write (Stream stream)
  59. {
  60. DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer();
  61. ser.Serialize (stream, this, GetNamespaceList());
  62. }
  63. public void Write (TextWriter textWriter)
  64. {
  65. DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer();
  66. ser.Serialize (textWriter, this, GetNamespaceList());
  67. }
  68. public void Write (XmlWriter xmlWriter)
  69. {
  70. DiscoveryDocumentSerializer ser = new DiscoveryDocumentSerializer();
  71. ser.Serialize (xmlWriter, this, GetNamespaceList());
  72. }
  73. XmlSerializerNamespaces GetNamespaceList ()
  74. {
  75. XmlSerializerNamespaces ns = new XmlSerializerNamespaces ();
  76. ns.Add ("scl", ContractReference.Namespace);
  77. return ns;
  78. }
  79. #endregion // Methods
  80. }
  81. internal class DiscoveryDocumentSerializer : XmlSerializer
  82. {
  83. protected override void Serialize (object o, XmlSerializationWriter writer)
  84. {
  85. DiscoveryDocumentWriter xsWriter = writer as DiscoveryDocumentWriter;
  86. xsWriter.WriteTree ((DiscoveryDocument)o);
  87. }
  88. protected override object Deserialize (XmlSerializationReader reader)
  89. {
  90. DiscoveryDocumentReader xsReader = reader as DiscoveryDocumentReader;
  91. return xsReader.ReadTree ();
  92. }
  93. protected override XmlSerializationWriter CreateWriter ()
  94. {
  95. return new DiscoveryDocumentWriter ();
  96. }
  97. protected override XmlSerializationReader CreateReader ()
  98. {
  99. return new DiscoveryDocumentReader ();
  100. }
  101. }
  102. }