0

我创建了一个使用 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 服务器,一段时间后断开它并返回错误给网页。

4

2 回答 2

1

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

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

于 2012-11-08T08:56:14.117 回答
1

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

于 2012-11-08T08:52:05.657 回答