【问题标题】:HttpWebrequest call order or unhandled exceptionHttpWebrequest 调用顺序或未处理异常
【发布时间】: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


【解决方案1】:

当我运行project 时,我在第二个请求中得到的 URL 是:

http://fahrplan.avv.de/master.php?&script=inquiry/service&apikey=avvtext&script=inquiry%2Fservice&apikey=avvtext&path=%2Fhome%2FconnectionInterstations&dep_city=aachen&dep_station=uniklinik&arr_city=j%C3%BClich+&arr_station=bf&time_deparr=dep&time_h=16&time_m=10&date_d=15&date_m=12&date_y=2011&AVV_DEP=a%3A2%3A%7Bs%3A32%3A%5C%5C%5C%5C%5C%5C%5C%22bc7f0461a0b4a09f77522616469ddf40%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A3%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22data%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A5%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22city%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A6%3A%5C%5C%5C%5C%5C%5C%5C%22aachen%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A7%3A%5C%5C%5C%5C%5C%5C%5C%22station%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A9%3A%5C%5C%5C%5C%5C%5C%5C%22uniklinik%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22city_gkz%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A12%3A%5C%5C%5C%5C%5C%5C%5C%22station_type%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A10%3A%5C%5C%5C%5C%5C%5C%5C%22station_id%5C%5C%5C%5C%5C%5C%5C%22%3BN%3B%7Ds%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22last%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1321202548%3Bs%3A5%3A%5C%5C%5C%5C%5C%5C%5C%22count%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1%3B%7Ds%3A32%3A%5C%5C%5C%5C%5C%5C%5C%22054a833caca0b0b81c1845f8d2a6001f%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A3%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22data%5C%5C%5C%5C%5C%5C%5C%22%3Ba%3A5%3A%7Bs%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22city%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22j%C3%BClich+%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A7%3A%5C%5C%5C%5C%5C%5C%5C%22station%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A2%3A%5C%5C%5C%5C%5C%5C%5C%22bf%5C%5C%5C%5C%5C%5C%5C%22%3Bs%3A8%3A%5C%5C%5C%5C%5C%5C%5C%22city_gkz%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A12%3A%5C%5C%5C%5C%5C%5C%5C%22station_type%5C%5C%5C%5C%5C%5C%5C%22%3BN%3Bs%3A10%3A%5C%5C%5C%5C%5C%5C%5C%22station_id%5C%5C%5C%5C%5C%5C%5C%22%3BN%3B%7Ds%3A4%3A%5C%5C%5C%5C%5C%5C%5C%22last%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1321202548%3Bs%3A5%3A%5C%5C%5C%5C%5C%5C%5C%22count%5C%5C%5C%5C%5C%5C%5C%22%3Bi%3A1%3B%7D%7D&showtimeframe=60&dateday=13&datemonth=11.2011&time=16%3A10&opt_timeopt=true&opt_minchange=3&opt_lowfloor=0&opt_ondemand=0&opt_rail=0&opt_surcharge=no&walkspeed=78&opt_walkpref=0&opt_nearby=false&via_pause=20&connection=NDA4NjA7OzM7MjcwNDE0MTU4MTgxNTgwODA7LTR8MyBBfDMwfDMgQXw2MHwzIEF8OTB8MyBBfDEyMHw7OTkwODc5OTQzMzc2NDg2NDQ7LTV8UkIyMHwxMXxSRTl8Mjd8UkUxfDYwfFJCMjB8NzF8UkU5fDg3fDs5OTM0MzA4NDUyNDk1NzY5NjstMnxSQjIxYXw2MHxSQjIxYXwxMjB8OzswOzA7MDs1OzA7MzswOzA7&searchConfig=80509129de625db319a7af6ef7a714c6&currentConnections=0062892b87364b4f252966c30e1eac19&connection[0]=1

这对于浏览器来说太长了,但我认为编码可能是问题(在 AVV_DEP 之后)。

我在网站上运行了一个简单的查询并将 URL 硬编码到您的项目中。请求成功。仔细查看第一种方法返回的 URL - 注意 URL 中的编码。

有效的网址是这样的:

http://fahrplan.avv.de/master.php?script=inquiry%2Fservice&apikey=avv&path=%2Fhome%2Fconnection&dep_city=Aachen&dep_station=&dep_city_gkz=5334002%3A0&dep_station_type=&dep_station_id=&via_city=&via_station=&via_pause=5&via_city_gkz=&via_station_type=&via_station_id=&arr_city=D%C3%BCren+%28Rheinland%29&arr_station=&arr_city_gkz=5358008%3A0&arr_station_type=&arr_station_id=&time_deparr=dep&time=13%3A30&dateday=14&datemonth=11.2011&date=14.11.2011&showtimetype=tours&showtours=5&showtimeframe=60&opt_nearby=false&walkspeed=83&opt_lowfloor=0&opt_surcharge=no&opt_ondemand=0&delfi_search=0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多