gpt4 book ai didi

请求 Azure Web 角色的方法时,C# HttpWebRequest.GetResponse() 挂起

转载 作者:行者123 更新时间:2023-11-30 18:31:32 25 4
gpt4 key购买 nike

我正在编写代码以向 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及其基类中有几个超时属性,我不知道它们的什么组合可以导致或解决这个问题。

您知道问题出在哪里吗?非常感谢。

最佳答案

从您的代码来看,由于您从操作中返回 JsonResult,因此您似乎拥有 RESTful 架构。调试 RESTful 架构的方法之一是使用浏览器,特别是在 HTTP 方法为 GET 的情况下。

您只需将您的 URL 复制/粘贴到浏览器的地址栏中即可查看是否收到任何响应。如果您看到结果,则说明您的客户端代码有问题,否则问题出在服务器端(azure 服务器)。

要监控 HTTP 流量,一个很好的实用程序是 Fiddler .

关于请求 Azure Web 角色的方法时,C# HttpWebRequest.GetResponse() 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19998979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com