【发布时间】:2015-06-04 20:42:33
【问题描述】:
我们正在使用 HttpClient 将 json 发布到一个安静的 Web 服务。在一个例子中,我们遇到了让我们感到困惑的事情。使用邮递员、提琴手等工具,我们可以发布到端点并查看它是否正常工作。当我们对 HttpClient.PostAsJsonAsync 执行相同操作时,我们可以在我们发布到的软件中验证它是否正常接收了数据。然而,我们的 PostAsJsonAsync 最终总会超时而不是给我们响应。
我们已经与创建我们正在使用的服务的团队合作,加上我们这边的额外测试,我们还不能真正让该服务超时。
每次我们使用 HttpClient 进行发布时,我们都可以验证我们发布到的目标软件是否确实获取了数据。每当我们从任何其他工具向该目标软件发布帖子时,我们总是很快就会看到状态码为 200 的响应。关于 HttpClient 的某些东西无法接受来自此特定服务的响应。有谁知道我们可以从这里看到什么?
这是代码(虽然它太俗套了,我几乎觉得没有必要)
public string PostData(string resourcePath, Object o, Boolean isCompleteUrl = false, int timeoutMinutes = -1)
{
using (var client = new HttpClient())
{
if (timeoutMinutes > 0)
{
client.Timeout = new TimeSpan(0,timeoutMinutes,0);
}
var useUrl = isCompleteUrl ? resourcePath : ApiBase + resourcePath;
var response = client.PostAsJsonAsync(useUrl, o).Result;
if(response.StatusCode == System.Net.HttpStatusCode.OK)
{
return response.Content.ReadAsStringAsync().Result;
}
return "";
}
}
【问题讨论】:
-
我实际上在使用 WebClient 时遇到了同样的问题。发布的数据反映在我们发布到的目标系统中,但我们的请求挂起。我开始认为这与自签名证书有关。我们正在 https 上连接到此服务的阶段/测试实例,并且证书可能没有有效的签名。然而,到目前为止,我似乎无法弄清楚如何验证这是否真的是问题。
标签: c# async-await dotnet-httpclient connection-timeout