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); }
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); }
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); }
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); }
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; }