我正在调用第三方Web API来更新我们的一些数据。我一直在快速连续提交大约五个工作,但前两个请求工作正常。然而,最后三个永远不会更新。该应用程序似乎表明请求已超时,但我想确保我没有搞乱任何事情。
我正在使用Action<string, Dictionary<string,object>> Delegate
调用下面的函数,我正在使用BeginInvoke
异步调用API。我真的不关心这个反应。我误解了WebRequest.GetResponse()
的某些内容,或者这是端点的问题吗?
private void UpdateJobInfo(string jobId, Dictionary<string, object> updates)
{
var postData = GetJsonEncodedValues(updates);
var request = WebRequest.Create(string.Format(JobResultEndpoint, _username, jobId));
request.ContentType = "application/json; charset=utf-8";
request.Method = WebRequestMethods.Http.Put;
request.Headers[HttpRequestHeader.Authorization] = GetAuthenticationCredentials();
request.GetRequestStream().Write(Encoding.ASCII.GetBytes(postData), 0, Encoding.ASCII.GetBytes(postData).Length);
request.GetResponse();
}
答案 0 :(得分:4)
你没有处理响应(或者确实是请求流,尽管这有点不同)。这意味着您将打开与服务器的连接,直到终结器发现响应可以完成为止。这些连接与(默认情况下)每个URL共有两个连接。因此,您之后的请求正在等待先前的响应最终确定,然后才能获得连接。
更好的代码:
// Is this definitely what you want? What about non-ASCII data?
byte[] binaryPostData = Encoding.ASCII.GetBytes(postData);
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(binaryPostData, 0, binaryPostData.Length);
}
using (var response = request.GetResponse())
{
// We don't care about the response, but we have to fetch it
// and dispose it.
}