2

我很难过-如果可能的话,请寻求帮助....

我经常使用 Fiddler 来帮助我编写针对远程 API 的代码,已经做了很多年没有任何问题。快乐的时光!

但是,我遇到了一个我无法理解的问题......

我正在调用远程 API。当我在 fiddler 运行的情况下进行调用时,它运行良好。当我在没有 fiddler 运行的情况下进行相同的调用时,调用超时?

这不仅仅发生在我的开发机器上。客户首先报告了问题。果然,当我让他安装 fiddler 时,它也在他的最后工作!

我只是无法弄清楚为什么只有在 Fiddler 未运行时调用此 API 才会失败,而在 fiddler 运行时才有效?

任何人都可以提出任何建议吗?

这是我的代码:

public static SalesForceModel.ClipIdResponse getClipId(string instance_url, string access_token, string clipTitle)
    {
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(instance_url + "/services/data/v20.0/sobjects/vClip__c");
        httpWebRequest.Headers.Add("Authorization", "Bearer " + access_token);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = "{\"Type__c\":\"PowerPoint\"," +
                          "\"Title__c\":\"" + clipTitle + "\"}";

            streamWriter.Write(json);
            streamWriter.Flush();
            streamWriter.Close();

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var result = streamReader.ReadToEnd();
                return JsonConvert.DeserializeObject<SalesForceModel.ClipIdResponse>(result);
            }

        }

    }
4

1 回答 1

2

通常,此行为表明您未能正确关闭GetResponseStream()函数返回的流,如本博文的HTTPWebRequest部分所述。

但是,您的using语句应该正确处理 usedStreamReader并且应该正确关闭底层流。

在您的应用程序的其他地方是否有任何其他使用 HTTPWebRequest 的GetResponseStream()函数可能不会关闭流?httpResponse.Close()如果在调用方法后显式调用,行为是否会发生变化ReadToEnd()

于 2013-10-17T05:04:11.670 回答