Fiddler停止StreamWriter超时

时间:2013-10-16 08:29:32

标签: c# visual-studio api fiddler

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

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

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

我正在调用远程API。当我用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);
            }

        }

    }

1 个答案:

答案 0 :(得分:2)

通常此行为表示您未能正确关闭GetResponseStream()函数返回的流,如{{HTTP>请求部分所述{{1> HTTPWebRequest 部分3}}

但是,您的using语句应该正确处理已使用的StreamReader,并且正确关闭基础流。

您的应用中其他位置的HTTPWebRequest的GetResponseStream()功能是否可能没有关闭流?如果在调用httpResponse.Close()方法后明确调用ReadToEnd(),行为是否会发生变化?