我的网络服务有问题......
当我的网址无效时,我的程序会挂起:/
我在网上看到它与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)。
我没有看到/得到它。
答案 0 :(得分:0)
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx
您忘记了一个步骤,您也可以在请求对象上设置超时
一般的想法是你获取请求流,将你的请求“字符串”转换为二进制并将其提供给流。
然后,您的响应回调会在您再次抓取流并将其转换回字符串的位置触发。
此示例中的postData是您在发布请求中发送到服务器的内容。