服务器关闭时取消HTTPWebRequest

时间:2012-11-08 08:42:27

标签: c# .net api windows-services httpwebrequest

我创建了一个使用HTTPWebRequest调用API(返回JSON)的Windows服务。

在具有“交付”的东西之前,API不会返回任何内容。因此,我将超时设置得非常高,并让请求等待,直到它收到响应。

问题是当我测试关闭或断开运行API的服务器时。 HTTPWebRequest不会停止请求。所以我不知道API服务器是否已关闭。

请求代码:

HttpWebRequest Request = (HttpWebRequest)HttpWebRequest.Create(Url);
Request.Method = "POST";
Request.ContentType = "application/x-www-form-urlencoded";
Request.ContentLength = PostData.Length;
Request.Timeout = Timeout;
Request.KeepAlive = true;
using (StreamWriter sw = new StreamWriter(Request.GetRequestStream()))
{
    sw.Write(PostData);
}
using (HttpWebResponse Response = (HttpWebResponse)Request.GetResponse())
{
    using (StreamReader sr = new StreamReader(Response.GetResponseStream()))
    {
        ResponseText = sr.ReadToEnd();
    }
}

当请求的服务器出现故障时,是否有“中断”请求? 我尝试使用webbrowser来调用API服务器,一段时间后断开它并将错误返回到网页。

2 个答案:

答案 0 :(得分:1)

您只能使用后台工作人员检查服务器是否在线。它有一些缺点,但可能工作正常。

答案 1 :(得分:1)

保持请求异步总是好的(请参阅HttpWebRequest中的BeginXXX方法 - http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx)。 使用异步API可确保在您从服务器获得响应之前不会阻止它。

除了使用异步API之外,您还可以获得心跳请求(可能只是对服务器上ping服务的HEAD HTTP请求,返回空体和HTTP 200状态),以便跟踪服务器还活着。如果此请求超时,则服务器不活动 - 在这种情况下,您可以取消/只是'忘记'已经发出请求。