前回までのサンプルではXDocument.Load(”URL”)でRSSのフィードをロードしてしましたが、Proxy経由でのアクセスが必要な場合に、Loadメソッド実行時に例外が発生します。
Loadメソッドは引数で指定されたURIがhttpであった場合に内部的にWebアクセスしていると思われますが、そのときにProxyに対しては考慮していないようです。また、Loadメソッドの引数やXDocumentのプロパティではProxyの設定をする方法が無いので、このような場合にはLoadメソッドで直接URIを指定するのではなく、Proxyの設定ができるWebClientとXmlReaderを使ってWEBサーバからXMLファイルを取得し、ストリーム化し、最終的にXMLデータとして取得する必要があります。
以下がそのサンプルです。
using System.Xml; using System.Net; using System.IO; WebClient web = new WebClient(); WebProxy myProxy = new WebProxy("proxy:8080", true); myProxy.Credentials = CredentialCache.DefaultCredentials; web.Proxy = myProxy; Stream stream = web.OpenRead(@"http://www.isisaka.com/blog/index.xml"); XmlReader reader = XmlReader.Create(stream); //XDocument rss = XDocument.Load(@"http://www.isisaka.com/blog/index.xml"); XDocument rss = XDocument.Load(reader);
5行目でWebClientクラスのインスタンスを作ります。
6行目でWebProxyクラスのインスタンスを作り、Proxyサーバアドレス等を設定し、7行目でそのProxyの認証のタイプを設定します。(この場合はNTLM認証です)
8行目でWebClientのインスタンスにProxyを設定します。
9行目ではWEBサーバよりXMLデータをStreamとして取得します。
11行目ではstreamになっているXMLデータをXmlReaderに変換します。
15行目でLinq to XMLでXMLデータを使用できるようにXmlReaderからXDocumentにXMLデータをロードします。
XDocumentクラスのLoadメソッドでのURI指定は便利ですが、ネットワーク環境によってはこのような処理が必要になるので注意してください。また今回特に例外処理を入れてないのですが、実際には部分部分で例外処理が必要になる場合があるのでその注意もお願いします。
.NETでのProxy設定については以下のKBが参考になります。
[PRB] HTTP プロキシ サーバー経由で Web サービスを使用する .NET クライアントでエラーが発生する
http://support.microsoft.com/kb/318140/
早いところ次回が書けるといいなぁ。ではまた次回!
コメント
Linq to XML 入門その1 (XML文書の作り方)
準備 これから数回に分けてLinq to XMLの基礎的な使い方についてまとめ…