我正在编写代码以在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及其基类中有几个超时属性,我不知道它们的组合会导致或解决这个问题。
关于问题可能是什么的任何想法? 非常感谢。
答案 0 :(得分:0)
从您的代码开始,由于您从操作中返回JsonResult
,您似乎拥有RESTful架构。调试RESTful架构的方法之一是使用浏览器,特别是在HTTP方法 GET 的情况下。
您只需在浏览器的地址栏中复制/粘贴您的网址,即可查看是否有任何回复。如果您看到结果,那么您的客户端代码就是问题,否则,问题出在服务器端(azure服务器)。
要监控HTTP流量,一个好的实用程序是Fiddler。
答案 1 :(得分:0)
在Windows Azure模拟器中本地运行项目。然后,检查计算模拟器的输出。它应该显示那里未处理的例外。
似乎对外部服务的调用失败,并且异常处理不当。我们之前遇到过类似的情况,甚至会导致IIS工作进程崩溃。