Example #1
0
        public DiscoveryClientResultCollection WriteAll(string directory, string topLevelFilename)
        {
            DiscoveryClientResultsFile resfile = new DiscoveryClientResultsFile();

            foreach (DiscoveryReference re in References.Values)
            {
                object doc = Documents [re.Url];
                if (doc == null)
                {
                    continue;
                }

                string fileName = FindValidName(resfile, re.DefaultFilename);
                resfile.Results.Add(new DiscoveryClientResult(re.GetType(), re.Url, fileName));

                string     filepath = Path.Combine(directory, fileName);
                FileStream fs       = new FileStream(filepath, FileMode.Create, FileAccess.Write);
                re.WriteDocument(doc, fs);
                fs.Close();
            }

            StreamWriter  sw  = new StreamWriter(Path.Combine(directory, topLevelFilename));
            XmlSerializer ser = new XmlSerializer(typeof(DiscoveryClientResultsFile));

            ser.Serialize(sw, resfile);
            sw.Close();
            return(resfile.Results);
        }
Example #2
0
        string FindValidName(DiscoveryClientResultsFile resfile, string baseName)
        {
            string name = baseName;
            int    id   = 0;
            bool   found;

            do
            {
                found = false;
                foreach (DiscoveryClientResult res in resfile.Results)
                {
                    if (name == res.Filename)
                    {
                        found = true;
                        break;
                    }
                }
                if (found)
                {
                    name = Path.GetFileNameWithoutExtension(baseName) + (++id) + Path.GetExtension(baseName);
                }
            }while (found);

            return(name);
        }
        public DiscoveryClientResultCollection ReadAll(string topLevelFilename)
        {
            XmlSerializer ser                  = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream        file                 = File.OpenRead(topLevelFilename);
            string        topLevelPath         = Path.GetDirectoryName(topLevelFilename);
            DiscoveryClientResultsFile results = null;

            try {
                results = (DiscoveryClientResultsFile)ser.Deserialize(file);
                for (int i = 0; i < results.Results.Count; i++)
                {
                    DiscoveryReference reference = (DiscoveryReference)Activator.CreateInstance(Type.GetType(results.Results[i].ReferenceTypeName));
                    reference.ClientProtocol = this;
                    reference.Url            = results.Results[i].Url;
                    Stream docFile = File.OpenRead(Path.Combine(topLevelPath, results.Results[i].Filename));
                    try {
                        Documents[results.Results[i].Url] = reference.ReadDocument(docFile);
                        Debug.Assert(Documents[results.Results[i].Url] != null, "Couldn't deserialize file " + results.Results[i].Filename);
                    }
                    finally {
                        docFile.Close();
                    }
                    References[reference.Url] = reference;
                }
            }
            finally {
                file.Close();
            }

            return(results.Results);
        }
        public DiscoveryClientResultCollection ReadAll(string topLevelFilename)
        {
            XmlSerializer serializer        = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream        stream            = System.IO.File.OpenRead(topLevelFilename);
            string        directoryName     = Path.GetDirectoryName(topLevelFilename);
            DiscoveryClientResultsFile file = null;

            try
            {
                file = (DiscoveryClientResultsFile)serializer.Deserialize(stream);
                for (int i = 0; i < file.Results.Count; i++)
                {
                    if (file.Results[i] == null)
                    {
                        throw new InvalidOperationException(Res.GetString("WebNullRef"));
                    }
                    string referenceTypeName = file.Results[i].ReferenceTypeName;
                    if ((referenceTypeName == null) || (referenceTypeName.Length == 0))
                    {
                        throw new InvalidOperationException(Res.GetString("WebRefInvalidAttribute", new object[] { "referenceType" }));
                    }
                    DiscoveryReference reference = (DiscoveryReference)Activator.CreateInstance(Type.GetType(referenceTypeName));
                    reference.ClientProtocol = this;
                    string url = file.Results[i].Url;
                    if ((url == null) || (url.Length == 0))
                    {
                        throw new InvalidOperationException(Res.GetString("WebRefInvalidAttribute2", new object[] { reference.GetType().FullName, "url" }));
                    }
                    reference.Url = url;
                    string filename = file.Results[i].Filename;
                    if ((filename == null) || (filename.Length == 0))
                    {
                        throw new InvalidOperationException(Res.GetString("WebRefInvalidAttribute2", new object[] { reference.GetType().FullName, "filename" }));
                    }
                    Stream stream2 = System.IO.File.OpenRead(Path.Combine(directoryName, file.Results[i].Filename));
                    try
                    {
                        this.Documents[reference.Url] = reference.ReadDocument(stream2);
                    }
                    finally
                    {
                        stream2.Close();
                    }
                    this.References[reference.Url] = reference;
                }
                this.ResolveAll();
            }
            finally
            {
                stream.Close();
            }
            return(file.Results);
        }
Example #5
0
        public DiscoveryClientResultCollection WriteAll(string directory, string topLevelFilename)
        {
            DiscoveryClientResultsFile results = new DiscoveryClientResultsFile();
            Hashtable filenames        = new Hashtable();
            string    topLevelFullPath = Path.Combine(directory, topLevelFilename);

            // write out each of the documents
            DictionaryEntry[] entries = new DictionaryEntry[Documents.Count + InlinedSchemas.Keys.Count];
            int i = 0;

            foreach (DictionaryEntry entry in Documents)
            {
                entries[i++] = entry;
            }
            foreach (DictionaryEntry entry in InlinedSchemas)
            {
                entries[i++] = entry;
            }
            foreach (DictionaryEntry entry in entries)
            {
                string url      = (string)entry.Key;
                object document = entry.Value;
                if (document == null)
                {
                    continue;
                }
                DiscoveryReference reference = References[url];
                string             filename  = reference == null?DiscoveryReference.FilenameFromUrl(Url) : reference.DefaultFilename;

                filename = GetUniqueFilename(filenames, Path.GetFullPath(Path.Combine(directory, filename)));
                results.Results.Add(new DiscoveryClientResult(reference == null ? null : reference.GetType(), url, GetRelativePath(filename, topLevelFullPath)));
                Stream file = File.Create(filename);
                try {
                    reference.WriteDocument(document, file);
                }
                finally {
                    file.Close();
                }
            }

            // write out the file that points to all those documents.
            XmlSerializer ser          = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream        topLevelFile = File.Create(topLevelFullPath);

            try {
                ser.Serialize(new StreamWriter(topLevelFile, new UTF8Encoding(false)), results);
            }
            finally {
                topLevelFile.Close();
            }

            return(results.Results);
        }
Example #6
0
        public DiscoveryClientResultCollection ReadAll(string topLevelFilename)
        {
            XmlSerializer ser                  = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream        file                 = File.OpenRead(topLevelFilename);
            string        topLevelPath         = Path.GetDirectoryName(topLevelFilename);
            DiscoveryClientResultsFile results = null;

            try {
                results = (DiscoveryClientResultsFile)ser.Deserialize(file);
                for (int i = 0; i < results.Results.Count; i++)
                {
                    if (results.Results[i] == null)
                    {
                        throw new InvalidOperationException(Res.GetString(Res.WebNullRef));
                    }
                    string typeName = results.Results[i].ReferenceTypeName;
                    if (typeName == null || typeName.Length == 0)
                    {
                        throw new InvalidOperationException(Res.GetString(Res.WebRefInvalidAttribute, "referenceType"));
                    }
                    DiscoveryReference reference = (DiscoveryReference)Activator.CreateInstance(Type.GetType(typeName));
                    reference.ClientProtocol = this;

                    string url = results.Results[i].Url;
                    if (url == null || url.Length == 0)
                    {
                        throw new InvalidOperationException(Res.GetString(Res.WebRefInvalidAttribute2, reference.GetType().FullName, "url"));
                    }
                    reference.Url = url;
                    string fileName = results.Results[i].Filename;
                    if (fileName == null || fileName.Length == 0)
                    {
                        throw new InvalidOperationException(Res.GetString(Res.WebRefInvalidAttribute2, reference.GetType().FullName, "filename"));
                    }

                    Stream docFile = File.OpenRead(Path.Combine(topLevelPath, results.Results[i].Filename));
                    try {
                        Documents[reference.Url] = reference.ReadDocument(docFile);
                        Debug.Assert(Documents[reference.Url] != null, "Couldn't deserialize file " + results.Results[i].Filename);
                    }
                    finally {
                        docFile.Close();
                    }
                    References[reference.Url] = reference;
                }
                ResolveAll();
            }
            finally {
                file.Close();
            }
            return(results.Results);
        }
        public DiscoveryClientResultCollection WriteAll(string directory, string topLevelFilename)
        {
            DiscoveryClientResultsFile o = new DiscoveryClientResultsFile();
            Hashtable filenames          = new Hashtable();
            string    relativeTo         = Path.Combine(directory, topLevelFilename);

            DictionaryEntry[] entryArray = new DictionaryEntry[this.Documents.Count + this.InlinedSchemas.Keys.Count];
            int num = 0;

            foreach (DictionaryEntry entry in this.Documents)
            {
                entryArray[num++] = entry;
            }
            foreach (DictionaryEntry entry2 in this.InlinedSchemas)
            {
                entryArray[num++] = entry2;
            }
            foreach (DictionaryEntry entry3 in entryArray)
            {
                string key      = (string)entry3.Key;
                object document = entry3.Value;
                if (document != null)
                {
                    DiscoveryReference reference      = this.References[key];
                    string             uniqueFilename = (reference == null) ? DiscoveryReference.FilenameFromUrl(base.Url) : reference.DefaultFilename;
                    uniqueFilename = GetUniqueFilename(filenames, Path.GetFullPath(Path.Combine(directory, uniqueFilename)));
                    o.Results.Add(new DiscoveryClientResult((reference == null) ? null : reference.GetType(), key, GetRelativePath(uniqueFilename, relativeTo)));
                    Stream stream = System.IO.File.Create(uniqueFilename);
                    try
                    {
                        reference.WriteDocument(document, stream);
                    }
                    finally
                    {
                        stream.Close();
                    }
                }
            }
            XmlSerializer serializer = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream        stream2    = System.IO.File.Create(relativeTo);

            try
            {
                serializer.Serialize((TextWriter) new StreamWriter(stream2, new UTF8Encoding(false)), o);
            }
            finally
            {
                stream2.Close();
            }
            return(o.Results);
        }
Example #8
0
        public DiscoveryClientResultCollection ReadAll(string topLevelFilename)
        {
            StreamReader  sr  = new StreamReader(topLevelFilename);
            XmlSerializer ser = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            DiscoveryClientResultsFile resfile = (DiscoveryClientResultsFile)ser.Deserialize(sr);

            sr.Close();

            string basePath = Path.GetDirectoryName(topLevelFilename);

            foreach (DiscoveryClientResult dcr in resfile.Results)
            {
                Type type             = Type.GetType(dcr.ReferenceTypeName);
                DiscoveryReference dr = (DiscoveryReference)Activator.CreateInstance(type);
                dr.Url = dcr.Url;
                FileStream fs = new FileStream(Path.Combine(basePath, dcr.Filename), FileMode.Open, FileAccess.Read);
                Documents.Add(dr.Url, dr.ReadDocument(fs));
                fs.Close();
                References.Add(dr.Url, dr);
            }
            return(resfile.Results);
        }
        /// <summary>
        /// Reads in a file containing a map of saved discovery documents populating the Documents and References properties,
        /// with discovery documents, XML Schema Definition (XSD) schemas, and service descriptions referenced in the file.
        /// </summary>
        /// <param name="topLevelFilename">Name of file to read in, containing the map of saved discovery documents.</param>
        /// <returns>
        /// A DiscoveryClientResultCollection containing the results found in the file with the map of saved discovery documents.
        /// The file format is a DiscoveryClientProtocol.DiscoveryClientResultsFile class serialized into XML; however, one would
        /// typically create the file using only the WriteAll method or Disco.exe.
        /// </returns>
        public DiscoveryClientResultCollection ReadAllUseBasePath(string topLevelFilename)
        {
            string        basePath             = (new FileInfo(topLevelFilename)).Directory.FullName;
            StreamReader  sr                   = new StreamReader(topLevelFilename);
            XmlSerializer ser                  = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            DiscoveryClientResultsFile resfile = (DiscoveryClientResultsFile)ser.Deserialize(sr);

            sr.Close();

            foreach (DiscoveryClientResult dcr in resfile.Results)
            {
                // Done this cause Type.GetType(dcr.ReferenceTypeName) returned null
                Type type = null;
                switch (dcr.ReferenceTypeName)
                {
                case "System.Web.Services.Discovery.ContractReference":
                    type = typeof(System.Web.Services.Discovery.ContractReference);
                    break;

                case "System.Web.Services.Discovery.DiscoveryDocumentReference":
                    type = typeof(System.Web.Services.Discovery.DiscoveryDocumentReference);
                    break;

                default:
                    continue;
                }

                DiscoveryReference dr = (DiscoveryReference)Activator.CreateInstance(type);
                dr.Url = dcr.Url;
                FileStream fs = new FileStream(Path.Combine(basePath, dcr.Filename), FileMode.Open, FileAccess.Read);
                Documents.Add(dr.Url, dr.ReadDocument(fs));
                fs.Close();
                References.Add(dr.Url, dr);
            }
            return(resfile.Results);
        }
		string FindValidName (DiscoveryClientResultsFile resfile, string baseName)
		{
			string name = baseName;
			int id = 0;
			bool found;
			do
			{
				found = false;
				foreach (DiscoveryClientResult res in resfile.Results)
				{
					if (name == res.Filename) {
						found = true; break;
					}
				}
				if (found)
					name = Path.GetFileNameWithoutExtension (baseName) + (++id) + Path.GetExtension (baseName);
			}
			while (found);
			
			return name;
		}
		public DiscoveryClientResultCollection WriteAll (string directory, string topLevelFilename)
		{
			DiscoveryClientResultsFile resfile = new DiscoveryClientResultsFile();
			
			foreach (DiscoveryReference re in References.Values)
			{
				object doc = Documents [re.Url];
				if (doc == null) continue;
				
				string fileName = FindValidName (resfile, re.DefaultFilename);
				resfile.Results.Add (new DiscoveryClientResult (re.GetType(), re.Url, fileName));
				
				string filepath = Path.Combine (directory, fileName);
				FileStream fs = new FileStream (filepath, FileMode.Create, FileAccess.Write);
				re.WriteDocument (doc, fs);
				fs.Close ();
			}
			
			StreamWriter sw = new StreamWriter (Path.Combine (directory, topLevelFilename));
			XmlSerializer ser = new XmlSerializer (typeof (DiscoveryClientResultsFile));
			ser.Serialize (sw, resfile);
			sw.Close ();
			return resfile.Results;
		}
 public DiscoveryClientResultCollection WriteAll(string directory, string topLevelFilename)
 {
     DiscoveryClientResultsFile o = new DiscoveryClientResultsFile();
     Hashtable filenames = new Hashtable();
     string relativeTo = Path.Combine(directory, topLevelFilename);
     DictionaryEntry[] entryArray = new DictionaryEntry[this.Documents.Count + this.InlinedSchemas.Keys.Count];
     int num = 0;
     foreach (DictionaryEntry entry in this.Documents)
     {
         entryArray[num++] = entry;
     }
     foreach (DictionaryEntry entry2 in this.InlinedSchemas)
     {
         entryArray[num++] = entry2;
     }
     foreach (DictionaryEntry entry3 in entryArray)
     {
         string key = (string) entry3.Key;
         object document = entry3.Value;
         if (document != null)
         {
             DiscoveryReference reference = this.References[key];
             string uniqueFilename = (reference == null) ? DiscoveryReference.FilenameFromUrl(base.Url) : reference.DefaultFilename;
             uniqueFilename = GetUniqueFilename(filenames, Path.GetFullPath(Path.Combine(directory, uniqueFilename)));
             o.Results.Add(new DiscoveryClientResult((reference == null) ? null : reference.GetType(), key, GetRelativePath(uniqueFilename, relativeTo)));
             Stream stream = System.IO.File.Create(uniqueFilename);
             try
             {
                 reference.WriteDocument(document, stream);
             }
             finally
             {
                 stream.Close();
             }
         }
     }
     XmlSerializer serializer = new XmlSerializer(typeof(DiscoveryClientResultsFile));
     Stream stream2 = System.IO.File.Create(relativeTo);
     try
     {
         serializer.Serialize((TextWriter) new StreamWriter(stream2, new UTF8Encoding(false)), o);
     }
     finally
     {
         stream2.Close();
     }
     return o.Results;
 }
        public DiscoveryClientResultCollection WriteAll(string directory, string topLevelFilename) {
            DiscoveryClientResultsFile results = new DiscoveryClientResultsFile();
            Hashtable filenames = new Hashtable();
            string topLevelFullPath = Path.Combine(directory, topLevelFilename);

            // write out each of the documents
            DictionaryEntry[] entries = new DictionaryEntry[Documents.Count + InlinedSchemas.Keys.Count];
            int i = 0;
            foreach (DictionaryEntry entry in Documents) {
                entries[i++] = entry;
            }
            foreach (DictionaryEntry entry in InlinedSchemas) {
                entries[i++] = entry;
            }
            foreach (DictionaryEntry entry in entries) {
                string url = (string) entry.Key;
                object document = entry.Value;
                if (document == null)
                    continue;
                DiscoveryReference reference = References[url];
                string filename = reference == null ? DiscoveryReference.FilenameFromUrl(Url) : reference.DefaultFilename;
                filename = GetUniqueFilename(filenames, Path.GetFullPath(Path.Combine(directory, filename)));
                results.Results.Add(new DiscoveryClientResult(reference == null ? null : reference.GetType(), url, GetRelativePath(filename, topLevelFullPath)));
                Stream file = File.Create(filename);
                try {
                    reference.WriteDocument(document, file);
                }
                finally {
                    file.Close();
                }
            }

            // write out the file that points to all those documents.
            XmlSerializer ser = new XmlSerializer(typeof(DiscoveryClientResultsFile));
            Stream topLevelFile = File.Create(topLevelFullPath);
            try {
                ser.Serialize(new StreamWriter(topLevelFile, new UTF8Encoding(false)), results);
            }
            finally {
                topLevelFile.Close();
            }

            return results.Results;
        }