У меня есть веб-служба, которая обрабатывает HTTP-запросы. Документ, который он получает, имеет встроенный DOCTYPE, который определяет файл .dtd. Я хочу использовать новый файл проверки схемы XML, созданный для случаев, когда новые устройства подключаются к моей службе.
Я могу успешно игнорировать проверку, которая выполняется в файле .dtd, но файл .dtd должен существовать на моем локальном жестком диске . Я хочу удалить эти устаревшие файлы и не нашел способа.
Образец XML-документа, который я обрабатываю:
<?xml version="1.0" encoding="us-ascii" standalone="no"?>
<!DOCTYPE SomeMessage SYSTEM "SomeMessage.dtd">
<SomeMessage>data</SomeMessage>
Функция, которую я использую для открытия документа:
private void LoadXmlDoc(XmlTextReader myXmlTextReader)
{
XmlReaderSettings readerSettings = new XmlReaderSettings();
readerSettings.ValidationType = ValidationType.Schema;
readerSettings.Schemas.Add(null, MyGoodSchemaFile);
readerSettings.DtdProcessing = DtdProcessing.Ignore;
readerSettings.XmlResolver = null; // Added as a test.
readerSettings.ValidationEventHandler += ValidationEventHandle;
XmlReader myXmlReader = XmlReader.Create(myXmlTextReader, readerSettings);
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.XmlResolver = null; // Added as a test.
myXmlDocument.Load(myXmlReader); // Exception thrown here!
}
Обнаруженное исключение:
System.IO.FileNotFoundException: Could not find file 'c:\windows\system32\inetsrv\SomeMessage.dtd'. File name: 'c:\windows\system32\inetsrv\SomeMessage.dtd' at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
Содержимое файла SomeMessage.dtd не используется - оно игнорируется по моему желанию. Однако фиктивный файл "c: \ windows \ system32 \ inetsrv \ SomeMessage.dtd" должен существовать, в противном случае возникает исключение.
Я работаю в Windows 7, использую Visual Studio 2010 и .Net 4.0
Как я могу игнорировать встроенный .dtd и не требовать, чтобы на моем компьютере был установлен фиктивный файл .dtd ?