예제 #1
0
		private XmlReader GetXmlReader (string url)
		{
			XmlResolver res = new XmlUrlResolver ();
			Uri uri = res.ResolveUri (null, url);
			Stream s = res.GetEntity (uri, null, typeof (Stream)) as Stream;
			XmlTextReader xtr = new XmlTextReader (uri.ToString (), s);
			xtr.XmlResolver = res;
			XmlValidatingReader xvr = new XmlValidatingReader (xtr);
			xvr.XmlResolver = res;
			xvr.ValidationType = ValidationType.None;
			return xvr;
		}
        private static Version GetMetadataVersion(GeneratorParams generatorParams)
        {
            if (string.IsNullOrEmpty(generatorParams.MetadataDocumentUri))
            {
                throw new ArgumentNullException("OData Service Endpoint", Resources.Please_input_the_metadata_document_address);
            }

            if (File.Exists(generatorParams.MetadataDocumentUri))
            {
                generatorParams.MetadataDocumentUri = new FileInfo(generatorParams.MetadataDocumentUri).FullName;
            }

            if (generatorParams.MetadataDocumentUri.StartsWith("https:", StringComparison.Ordinal) ||
                generatorParams.MetadataDocumentUri.StartsWith("http", StringComparison.Ordinal))
            {
                if (!generatorParams.MetadataDocumentUri.EndsWith("$metadata", StringComparison.Ordinal))
                {
                    generatorParams.MetadataDocumentUri = generatorParams.MetadataDocumentUri.TrimEnd('/') + "/$metadata";
                }
            }

            Stream metadataStream;
            var    metadataUri = new Uri(generatorParams.MetadataDocumentUri);

            if (!metadataUri.IsFile)
            {
                var webRequest = (HttpWebRequest)WebRequest.Create(metadataUri);

                if (generatorParams.IncludeWebProxy)
                {
                    var proxy = new WebProxy(generatorParams.WebProxyHost);
                    if (generatorParams.IncludeWebProxyNetworkCredentials)
                    {
                        proxy.Credentials = new NetworkCredential(
                            generatorParams.WebProxyNetworkCredentialsUsername,
                            generatorParams.WebProxyNetworkCredentialsPassword,
                            generatorParams.WebProxyNetworkCredentialsDomain);
                    }

                    webRequest.Proxy = proxy;
                }

                WebResponse webResponse = webRequest.GetResponse();
                metadataStream = webResponse.GetResponseStream();
            }
            else
            {
                // Set up XML secure resolver
                var xmlUrlResolver = new XmlUrlResolver
                {
                    Credentials = CredentialCache.DefaultNetworkCredentials
                };

                metadataStream = (Stream)xmlUrlResolver.GetEntity(metadataUri, null, typeof(Stream));
            }

            var workFile = Path.GetTempFileName();

            try
            {
                using (XmlReader reader = XmlReader.Create(metadataStream))
                {
                    using (var writer = XmlWriter.Create(workFile))
                    {
                        while (reader.NodeType != XmlNodeType.Element)
                        {
                            reader.Read();
                        }

                        if (reader.EOF)
                        {
                            throw new InvalidOperationException(Resources.The_metadata_is_an_empty_file);
                        }

                        Constants.SupportedEdmxNamespaces.TryGetValue(reader.NamespaceURI, out var edmxVersion);
                        writer.WriteNode(reader, false);
                        return(edmxVersion);
                    }
                }
            }
            catch (WebException e)
            {
                throw new InvalidOperationException(string.Format(Resources.Cannot_access_metadata, generatorParams.MetadataDocumentUri), e);
            }
        }
        internal string GetMetadata(out Version edmxVersion)
        {
            if (string.IsNullOrEmpty(this.Endpoint))
            {
                throw new ArgumentNullException("OData Service Endpoint", string.Format(CultureInfo.InvariantCulture, Constants.InputServiceEndpointMsg));
            }

            if (this.Endpoint.StartsWith("https:", StringComparison.Ordinal) ||
                this.Endpoint.StartsWith("http", StringComparison.Ordinal))
            {
                if (!this.Endpoint.Contains("$metadata"))
                {
                    this.Endpoint = this.Endpoint.TrimEnd('/') + "/$metadata";
                }
            }

            Stream metadataStream;
            var    metadataUri = new Uri(this.Endpoint);

            if (!metadataUri.IsFile)
            {
                var webRequest = (HttpWebRequest)WebRequest.Create(metadataUri);
                if (this.CustomHttpHeaders != null)
                {
                    var headerElements = this.CustomHttpHeaders.Split(new [] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
                    foreach (var headerElement in headerElements)
                    {
                        // Trim header for empty spaces
                        var header = headerElement.Trim();
                        webRequest.Headers.Add(header);
                    }
                }

                if (IncludeWebProxy)
                {
                    var proxy = new WebProxy(WebProxyHost);
                    if (IncludeWebProxyNetworkCredentials)
                    {
                        proxy.Credentials = new NetworkCredential(WebProxyNetworkCredentialsUsername, WebProxyNetworkCredentialsPassword, WebProxyNetworkCredentialsDomain);
                    }

                    webRequest.Proxy = proxy;
                }

                WebResponse webResponse = webRequest.GetResponse();
                metadataStream = webResponse.GetResponseStream();
            }
            else
            {
                // Set up XML secure resolver
                var xmlUrlResolver = new XmlUrlResolver
                {
                    Credentials = CredentialCache.DefaultNetworkCredentials
                };

                metadataStream = (Stream)xmlUrlResolver.GetEntity(metadataUri, null, typeof(Stream));
            }

            var workFile = Path.GetTempFileName();

            try
            {
                using (XmlReader reader = XmlReader.Create(metadataStream))
                {
                    using (var writer = XmlWriter.Create(workFile))
                    {
                        while (reader.NodeType != XmlNodeType.Element)
                        {
                            reader.Read();
                        }

                        if (reader.EOF)
                        {
                            throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "The metadata is an empty file"));
                        }

                        Common.Constants.SupportedEdmxNamespaces.TryGetValue(reader.NamespaceURI, out edmxVersion);
                        writer.WriteNode(reader, false);
                    }
                }
                return(workFile);
            }
            catch (WebException e)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, "Cannot access {0}", this.Endpoint), e);
            }
            finally
            {
                metadataStream?.Dispose();
            }
        }
예제 #4
0
파일: xmldsig.cs 프로젝트: nlhepler/mono
	static TextReader GetReader (string filename)
	{
		XmlResolver resolver = new XmlUrlResolver ();
		Stream stream = resolver.GetEntity (resolver.ResolveUri (null, filename), null, typeof (Stream)) as Stream;
		if (useDecentReader)
			return new XmlSignatureStreamReader (
				new StreamReader (stream));
		else
			return new StreamReader (stream);
	}
예제 #5
0
 private bool LoadSchema(string uri) {
     uri = _NameTable.Add(uri);
     if (_SchemaInfo.HasSchema(uri)) {
         return false;
     }
     SchemaInfo schemaInfo = null;
     XmlResolver resolver = new XmlUrlResolver();
     Uri _baseUri = resolver.ResolveUri(null,_reader.BaseURI);
     XmlReader reader = null;
     try {
         
         Uri ruri = resolver.ResolveUri(_baseUri, uri.Substring(x_schema.Length));
         Stream stm = (Stream)resolver.GetEntity(ruri,null,null);
         reader = new XmlTextReader(ruri.ToString(), stm, _NameTable);
         schemaInfo = new SchemaInfo(_SchemaNames);
         new Parser(null, _NameTable, _SchemaNames, validationEventHandler).Parse(reader, uri, schemaInfo);
     }
     catch(XmlException e) {
         SendValidationEvent(Res.Sch_CannotLoadSchema, new string[] {uri, e.Message}, XmlSeverityType.Warning);
         schemaInfo = null;
     }
     finally {
         if (reader != null) {
             reader.Close();
         }
     }
     if (schemaInfo != null && schemaInfo.ErrorCount == 0) {
         _SchemaInfo.Add(uri, schemaInfo, validationEventHandler);
         return true;
     }
     return false;
 }