【发布时间】:2011-11-13 23:11:14
【问题描述】:
我想检索网页的内容,解析它们并检索链接的页面,以便对其进行解析。
我创建了一种区分站点类型的下载方法:
void startReq(string url, int type)
{
switch (type)
{
case 1:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.BeginGetResponse(new AsyncCallback(GetRequestStreamCallbackPageTypeOne), webRequest);
break;
case 2:
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webReques.BeginGetResponse(new AsyncCallback(GetRequestStreamCallbackPageTypeTwo), webReques);
break;
default:
MessageBox.Show("should not get here: startreq-Method ,default-case");
break;
}
}
这是回调:
void GetRequestStreamCallbackPageTypeOne(IAsyncResult asynchronousResult)
{
string responseString = "";
WebResponse response = ((HttpWebRequest)asynchronousResult.AsyncState).EndGetResponse(asynchronousResult);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
responseString = reader.ReadToEnd();
reader.Close();
}
Dispatcher.BeginInvoke(()=>parseFirstpage(responseString));
}
如您所见,我使用Dispatcher 来调用解析方法(我不知道该怎么做)。
完成解析后,我使用 page-type 2 参数调用 startReq。
但是在GetRequestStreamCallbackPageTypeTwo 方法中,* 看起来与GetRequestStreamCallbackPageTypeOne 相同,我在这一行得到一个未处理的异常错误:
WebResponse response = ((HttpWebRequest)asynchronousResult.AsyncState).EndGetResponse(asynchronousResult);
我不明白为什么。我该如何纠正这个问题,或者有比我更好的解决方案吗?
【问题讨论】:
-
请发布异常信息。当您调用 EndGetResponse 时,来自 Web 服务器的任何错误都会引发异常。
-
只有:“异常未处理”,如果我按更多详细信息,则有:System.Exception {“”}。更深入我得到: Data {System.Collections.ListDictionaryInterval} InnerException {"Unspecified error"} Message ""
-
在您的 switch 语句中设置断点并仔细检查您用于创建第二个请求的 URL。如果您发布网址,那么我可以查看它是否适合我。还要检查您的变量名称,在发布的代码中,您使用未声明的“webReques”变量(缺少“t”)。
-
StackTrace: 在 System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) 在 System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 parseavv.MainPage.GetRequestStreamCallbackPageTypeTwo(IAsyncResult asynchronousResult) )...
-
@calum 这是一个很长的网址,但如果我用浏览器打开它就可以了。我已经在goo.gl/2oWhX 上传了我的项目,你能看一下吗?
标签: c# silverlight windows-phone-7 asynchronous httpwebrequest