webrequest的相同方法在一个程序中有效,而在另一个程序中无效

时间:2019-07-18 16:45:06

标签: c# timeout webrequest

我有一个c#控制台程序,它使用webrequest调用库方法可以正常工作,但是当我从另一个程序(一个mvc站点)调用相同的库方法时,它只是挂起了。即使我给它一个超时值,它也永远不会超时。

console app:
   console project
   bitly project

mvc site
   web server project
   bitly project

我已经验证了它与控制台应用程序中相同的值是否可以正常工作,但是只是将其与Web代码一起放在那里。

var url = $"https://api-ssl.bitly.com/v3/shorten?access_token={apikey}&longUrl={WebUtility.UrlEncode(longUrl)}";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
    var response = await request.GetResponseAsync();
    using (var responseStream = response.GetResponseStream())
    {
        response.Timeout = 30000
        var reader = new StreamReader(responseStream, Encoding.UTF8);
        var jsonResponse = JObject.Parse(await reader.ReadToEndAsync());
        var statusCode = jsonResponse["status_code"].Value<int>();
        if (statusCode == (int)HttpStatusCode.OK)
        ...
    }
}

这是在我创建的bitly.library项目中。该库仅使用newtonsoft nuget包。如果有问题,调用程序都使用相同版本的system.net.http。

我已验证两个程序最终都使用相同的URL。

当我从控制台应用程序调用它时,GetResponseStream()调用立即随数据一起返回。当我从webhook调用它(适用于短信系统)时,GetResponseStream()会永远挂起。

我也在两台不同的计算机上尝试过。

我唯一的线索是超时似乎从未起作用,这让我觉得Web服务器解决方案中的webrequest库有问题。但是因为它都不使用nuget包,所以我迷失了。

1 个答案:

答案 0 :(得分:0)

我最终将代码切换为使用HttpClient而不是WebRequest,问题得以解决。

我不确定为什么WebRequest会这样,但是现在工作正常。