XmlDataDocumentクラスのLoadメソッドを直接使用しないでください。長時間実行されるHTTPリクエストに関しては、動作に影響を与える方法はほとんどありません。
代わりに、HttpWebRequestクラスとHttpWebResponseクラスを使用して作業を行い、その後の応答をドキュメントにロードします。
例えば:
HttpWebRequest rq = WebRequest.Create("http://www.globalgear.com.au/productfeed.xml") as HttpWebRequest;
//60 Second Timeout
rq.Timeout = 60000;
//Also note you can set the Proxy property here if required; sometimes it is, especially if you are behind a firewall - rq.Proxy = new WebProxy("proxy_address");
HttpWebResponse response = rq.GetResponse() as HttpWebResponse;
XmlTextReader reader = new XmlTextReader(response.GetResponseStream());
XmlDocument doc = new XmlDocument();
doc.Load(reader);
このコードをローカルアプリインスタンスでテストしたところ、XmlDocumentにURLのデータが入力されています。
上記の例では、XmlDocumentの代わりにXmlDataDocumentを使用することもできます。XmlDocumentは(まだ)廃止としてマークされていないため、使用することをお勧めします。
私はこれをあなたのための関数で包みました:
public XmlDocument GetDataFromUrl(string url)
{
XmlDocument urlData = new XmlDocument();
HttpWebRequest rq = (HttpWebRequest)WebRequest.Create(url);
rq.Timeout = 60000;
HttpWebResponse response = rq.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
XmlTextReader reader = new XmlTextReader(responseStream);
urlData.Load(reader);
}
return urlData;
}
以下を使用して電話するだけです。
XmlDocument document = GetDataFromUrl("http://www.globalgear.com.au/productfeed.xml");