2

我正在调用第三方 Web API 来更新我们的一些数据。我已经连续快速提交了大约五个工作,而且前两个请求都正常工作。然而,最后三个永远不会更新。该应用程序似乎表明请求正在超时,但我想确保我没有搞砸任何事情。

我用 an 调用下面的函数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();
    }
4

1 回答 1

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.
}
于 2013-04-05T19:34:57.317 回答