2010-10-08 13 views
6

मेरे पास एक वेब सेवा है जो HTTP अनुरोध को संसाधित करती है। प्राप्त दस्तावेज़ में एक एम्बेडेड DOCTYPE है जो एक .dtd फ़ाइल निर्दिष्ट करता है। जब नई डिवाइस मेरी सेवा से कनेक्ट होती है तो मैं एक नई एक्सएमएल स्कीमा सत्यापन फ़ाइल का उपयोग करना चाहता हूं।DOCTYPE .dtd को अनदेखा करें, लेकिन .dtd फ़ाइल अभी भी मौजूद है

मैं .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" मौजूद होना चाहिए, अन्यथा अपवाद फेंक दिया गया है।

मैं विंडोज 7 पर चला रहा हूँ, मैं कैसे embeded .dtd अनदेखा कर सकते हैं और यह भी एक डमी .dtd फ़ाइल की आवश्यकता नहीं अपने कंप्यूटर पर स्थापित होने के लिए दृश्य स्टूडियो 2010 और नेट 4.0

का उपयोग कर?

+0

इस वेब किस तरह की सेवा है: XmlReaderSettings.XmlResolver = बातिल को सही समारोह बदल रहा है मदद नहीं की, और न ही XmlDocument.XmlResolver = अशक्त

यहाँ की स्थापना की थी जाता है? घर उगाया गया या एक एएसपी.नेट वेब सेवा (.asmx)? क्या यह वेब सेवा क्लाइंट है जो डीटीडी की तलाश में है? – Kev

+0

यह एक .aspx.cs सी # फ़ाइल के साथ एक .aspx सेवा है। हालांकि, मुझे लगता है कि मामला नहीं है। मुझे लगता है कि कोड स्निपेट द्वारा पढ़ा गया कोई भी XML दस्तावेज़ जिसमें ऊपर .dtd लाइन के साथ DOCTYPE है, त्रुटि होगी, इससे कोई फर्क नहीं पड़ता कि आप इसे कहां निष्पादित करते हैं। –

उत्तर

9

समाधान अंतर्निहित XmlTextReader के XmlResolver को शून्य पर सेट करना है।

+0

आपने मेरा जीवन बचाया! मैंने एक डीएल विकसित किया जो पूरी तरह से फॉर्मबेस में काम कर रहा है। लेकिन इसे .NET वेब ऐप से जोड़ने के बाद, यह डीटी पर दुर्घटनाग्रस्त हो रहा था। इसलिए वेब ऐप्स में उपयोग करते समय इसकी आवश्यकता होती है। धन्यवाद! – bert

संबंधित मुद्दे