webrequest getresponse无效的url程序挂起

时间:2012-12-22 21:07:17

标签: c# webrequest getresponse

我的网络服务有问题......

当我的网址无效时,我的程序会挂起:/ 我在网上看到它与GetResponse有关,我必须使用BeginGetResponse(异步)?

我尝试了异步的各种代码,但不起作用......

我拥有的东西(挂起无效的网址):

            WebRequest request;
            request = WebRequest.Create(url);

            WebResponse webResponse = request.GetResponse();

            Stream ReceiveStream = webResponse.GetResponseStream();
            Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream = new StreamReader(ReceiveStream, encode);


            reader = new XmlTextReader(readStream);
            String[] login = new String[1];


            reader.Read();
            reader.ReadStartElement("response");

            reader.ReadStartElement("item");
            login[0] = reader.ReadString();


            reader.ReadEndElement();
            reader.ReadEndElement();

            reader.Close();

我尝试了什么:

    private HttpWebResponse response;
    private void FinishWebRequest(IAsyncResult result)
    {
        response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as       HttpWebResponse;
    }

    public void Read()
    {

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.BeginGetResponse(new AsyncCallback(FinishWebRequest), request);

            Stream ReceiveStream = response.GetResponseStream();
            Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            StreamReader readStream = new StreamReader(ReceiveStream, encode);


            reader = new XmlTextReader(readStream);

但是在这里我得到了一个InvalidOperation异常(即使有一个有效的/已存在的url)。 我没有看到/得到它。

1 个答案:

答案 0 :(得分:0)

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx

您忘记了一个步骤,您也可以在请求对象上设置超时

一般的想法是你获取请求流,将你的请求“字符串”转换为二进制并将其提供给流。

然后,您的响应回调会在您再次抓取流并将其转换回字符串的位置触发。

此示例中的postData是您在发布请求中发送到服务器的内容。