我很困惑 - 如果可能的话寻求帮助......
我经常使用 Fiddler 来帮助我针对远程 API 编写代码,已经使用了很长时间,没有出现任何问题。快乐的日子!
但是,我遇到了一个我无法理解的问题......
我正在调用远程 API。当我在运行 fiddle 手的情况下调用电话时,它工作得很好。当我在没有运行 fiddler 的情况下进行相同的调用时,调用会超时吗?
这不仅仅发生在我的开发机器上。客户首先报告了问题。果然,当我要求他安装 fiddler 时,它也能在他那一端工作!
我只是不明白为什么只有当 Fiddler 未运行时调用此 API 才会失败,而当 fiddler 运行时调用此 API 才有效??
有人可以提出建议吗?
这是我的代码:
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);
}
}
}
最佳答案
通常此行为表明您未能正确关闭 GetResponseStream()
返回的流。函数,如 this blog post 的 HTTPWebRequest 部分所述.
但是,您的using
声明应该正确处置用过的StreamReader
并且应该正确关闭底层流。
HTTPWebRequest的GetResponseStream()
还有其他用途吗?您的应用程序中其他地方可能不会关闭流的函数?如果您显式调用httpResponse.Close()
,行为是否会发生变化调用ReadToEnd()
后方法?
关于c# - Fiddler 停止 StreamWriter 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398554/