Я пытаюсь запретить доступ .NET Framework к Интернету при проверке XML-документа с использованием XML-схем, потому что я не хочу, чтобы он постоянно полагался на веб-доступ. Для этого я специально создал локальные копии всех XSD, которые я использую при проверке, на локальном жестком диске, но при загрузке некоторых из этих схем он все еще не работает.
Например, этот фрагмент кода не работает (, но только если отключить мою машину из Интернета ):
using (Stream schemaStream = File.OpenRead(schemaFileName))
{
XmlSchema schema = XmlSchema.Read(schemaStream, ValidationCallBack);
xmlSchemaSet.Add(schema);
}
schemaFileName
указывает на локально сохраненную копию файла xmldsig-core-schema.xsd
. Я получаю исключение
System.Net.WebException: The remote name could not be resolved: 'www.w3.org'
Status: NameResolutionFailure
at System.Net.HttpWebRequest.GetResponse()
at System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri, ICredentials credentials)
at System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials)
at System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn)
at System.Xml.XmlTextReaderImpl.OpenStream(Uri uri)
at System.Xml.XmlTextReaderImpl.DtdParserProxy_PushExternalSubset(String systemId, String publicId)
at System.Xml.XmlTextReaderImpl.DtdParserProxy.System.Xml.IDtdParserAdapter.PushExternalSubset(String systemId, String publicId)
at System.Xml.DtdParser.ParseExternalSubset()
at System.Xml.DtdParser.ParseInDocumentDtd(Boolean saveInternalSubset)
at System.Xml.DtdParser.Parse(Boolean saveInternalSubset)
at System.Xml.XmlTextReaderImpl.DtdParserProxy.Parse(Boolean saveInternalSubset)
at System.Xml.XmlTextReaderImpl.ParseDoctypeDecl()
at System.Xml.XmlTextReaderImpl.ParseDocumentContent()
at System.Xml.XmlTextReaderImpl.Read()
at System.Xml.XmlTextReader.Read()
at System.Xml.Schema.Parser.StartParsing(XmlReader reader, String targetNamespace)
at System.Xml.Schema.Parser.Parse(XmlReader reader, String targetNamespace)
at System.Xml.Schema.XmlSchema.Read(XmlReader reader, ValidationEventHandler validationEventHandler)
at System.Xml.Schema.XmlSchema.Read(Stream stream, ValidationEventHandler validationEventHandler)
Я подозреваю, что он все еще пытается загрузить что-то из www.w3.org
, возможно, схему DTD http://www.w3.org/2001/XMLSchema.dtd
. Есть ли способ предотвратить это?