HttpWebResponse.GetResponse在c#中挂起

时间:2014-08-06 07:11:17

标签: c# httpwebrequest

我有以下代码:

string url = string.Format("http://{0}:{1}/{2}/xml",Address.Host,Address.Port,Address.ContextRoot);

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.UserAgent = "Foo";
req.ContentType = "text/xml; charset=\"UTF-8\"";
req.KeepAlive = false;

using (Stream reqStream = req.GetRequestStream())
{
    SoapEnvelope s = new SoapEnvelope(Address, null);
    XmlDocument xmlDoc = s.GenerateXml(message);
    xmlDoc.Save(reqStream);
}
result = ReceiveAnswer(req);


private string ReceiveAnswer(HttpWebRequest req)
{
    using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
    using (Stream resStream = res.GetResponseStream())
    using (StreamReader reader = new StreamReader(resStream))
    {

    if (res.StatusCode != HttpStatusCode.OK)
    {
        StringBuilder sb = new StringBuilder();
        sb.AppendFormat("Failed to post data to http://{0}:{1}", Address.Host, Address.Port).AppendLine();
        sb.AppendFormat("Response: {0} {1}", res.StatusCode, res.StatusDescription);
        res.Close();
        throw new WebException(sb.ToString());
    }
    String resData = reader.ReadToEnd();
    return resData;
    }
}

当我连接到现有服务器时,此代码工作正常,但我刚刚测试过,如果我指定的服务器不存在,则此部分:(HttpWebResponse)req.GetResponse()会挂起来的。我希望在这种情况下得到一个感觉或类似的东西,因为我想抓住它。

我已经在某个地方看到这个响应超时为100秒,我已经等了更多,但没有发生任何事情。然后我将Timeout属性设置为15秒,但这也没有帮助。

任何人都知道我该怎么做?

2 个答案:

答案 0 :(得分:0)

我的代码没有问题,公司代码的另一部分会导致问题。

答案 1 :(得分:-1)

要小心你正在做的事情。

    Timeout method does not apply to the time waiting for the response to be caught.
    Timeout counts for the entire life of your connection (meaning request + response).

如果您之后设置的暂停时间过短,您的程序将永远无法捕获它。也许你可以尝试提高超时数量?