我正在编写代码以在 Windows azure 中向我的 Web 服务发送请求,结果在超时之前我无法得到响应。令人困惑的是,我确定我的服务中的所有内容都已完成,但没有回复。
我的服务代码如下所示:
public virtual JsonResult ServiceMethod()
{
// 1. do the work
// 2. write something to database
return Json(result, JsonRequestBehavior.AllowGet);
}
我的客户端代码如下所示:
HttpWebRequest webRequest = WebRequest.Create(new Uri(httpAddress)) as HttpWebRequest;
webRequest.Timeout = 1000 * 1000;
webRequest.ServicePoint.ConnectionLeaseTimeout = 40 * 60 * 1000;
webRequest.ServicePoint.MaxIdleTime = 40 * 60 * 1000;
webRequest.ServicePoint.SetTcpKeepAlive(true, 50 * 1000, 1000);
webRequest.Method = "GET";
using (HttpWebResponse response = webRequest.GetResponse() as HttpWebResponse)
{
// handle the response
}
现在我很确定我的服务中的代码已经完成,因为我试图将一些东西写入数据库并且发生了。我还检查了托管服务的虚拟机上的 iis 日志,它显示返回了 http 200。但是我的客户端代码中的调用 GetResponse() 一直挂起,直到达到 1000 秒超时。
更新
我的 Web API 有一个参数会影响方法运行的时间。(为简单起见,我没有在上面的代码中显示它)。如果服务方法运行足够长的时间(如 6 或 7 分钟),则会发生挂起问题。否则,Web 响应可以成功返回。所以我想超时设置中可能存在一些问题。但是 HttpWebRequest 及其基类中有几个超时属性,我不知道它们的什么组合可以导致或解决这个问题。
关于问题可能是什么的任何想法?非常感谢。