2008-09-24 12 views
13

Ich habe ein wenig Code, der im Grunde liest ein XML-Dokument mit der XMLDocument.Load (URI) -Methode, die gut funktioniert, aber nicht so gut funktioniert, wenn der Anruf durch gemacht wird ein ProxyXMLDocument.Load (URL) über einen Proxy

Ich fragte mich, ob jemand wusste, wie man diesen Anruf (oder den gleichen Effekt) durch einen Proxy erreichen könnte?

Antwort

11

Müssen Sie dem Proxy Anmeldeinformationen angeben?

Wenn ja, sollte dies helfen: "Die Versorgung von Authentifizierungsinformationen zu XmlResolver wenn sie aus einer Datei lesen" http://msdn.microsoft.com/en-us/library/aa720674.aspx

Grundsätzlich Sie ...

  1. ein XmlTextReader Erstellen Sie die URL mit
  2. Legen Sie die Eigenschaft Credentials des XmlResolver des Readers fest
  3. Erstellen Sie eine XmlDocument-Instanz, und übergeben Sie den Reader an die Load-Methode.
6

Sie können XMLDocument nicht für die Verwendung von Proxy konfigurieren. Sie können die WebRequest- oder WebClient-Klasse verwenden, um Daten über einen Proxy zu laden und den erhaltenen Antwortstream an XMLDocument

zu übergeben. Sie können auch versuchen, die XmlTextReader-Klasse zu verwenden. Es ermöglicht Ihnen, Netzwerkanmeldeinformationen festzulegen. Nähere Informationen finden Sie:

Supplying Authentication Credentials to XmlResolver when Reading from a File

3

Sie müssen WebProxy verwenden und WebRequest die xml herunterladen, dann ist es analysieren.

13

Dies ist der Code, den ich am Ende mit:

WebProxy wp = new WebProxy(Settings.Default.ProxyAddress); 
wp.Credentials = new NetworkCredential(Settings.Default.ProxyUsername, Settings.Default.ProxyPassword); 
WebClient wc = new WebClient(); 
wc.Proxy = wp; 

MemoryStream ms = new MemoryStream(wc.DownloadData(url)); 
XmlTextReader rdr = new XmlTextReader(ms); 
return XDocument.Load(rdr); 
+3

Siehe @ Scotts Korrektur ändern ... –

11

Verwenden lomaxx Antwort aber

MemoryStream ms = new MemoryStream(wc.DownloadData(url)); 
XmlTextReader rdr = new XmlTextReader(url); 

zu

MemoryStream ms = new MemoryStream(wc.DownloadData(url)); 
XmlTextReader rdr = new XmlTextReader(ms);