我有以下代码:
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秒,但这也没有帮助。
任何人都知道我该怎么做?
答案 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).
如果您之后设置的暂停时间过短,您的程序将永远无法捕获它。也许你可以尝试提高超时数量?