美好的一天。
我真的需要帮助解决这个问题。我在这里尝试了所有可能的选择。
我在使用C#的Outlook加载项中使用REST API。该代码将outlook项目链接到CRM记录。加载项100%正常工作,但在几次调出后我继续收到错误“操作已经超时”。
当我使用谷歌Chrome应用程序“高级REST客户端”时,我可以相互发布相同的请求50次,没有超时错误。
在加载项中我使用POST,GET和PATCH HttpWebRequest,我得到了所有这些错误。错误发生在代码行System.IO.Stream os = req.GetRequestStream();
以下是方法:
public static string HttpPatch(string URI, string Parameters)
{
var req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(URI);
if (GlobalSettings.useproxy.Equals("true"))
{
req.Proxy = WebRequest.DefaultWebProxy;
req.Credentials = new NetworkCredential(GlobalSettings.proxyusername, GlobalSettings.proxypassword, GlobalSettings.proxydomain);
req.Proxy.Credentials = new NetworkCredential(GlobalSettings.proxyusername, GlobalSettings.proxypassword, GlobalSettings.proxydomain);
}
req.Headers.Add("Authorization: OAuth " + GlobalSettings.token.access_token);
req.ContentType = "application/json";
req.Method = "PATCH";
byte[] data = System.Text.Encoding.Unicode.GetBytes(Parameters);
req.ContentLength = data.Length;
using (System.IO.Stream os = req.GetRequestStream())
{
os.Write(data, 0, data.Length);
os.Close();
}
WebResponse resp;
try
{
resp = req.GetResponse();
}
catch (WebException ex)
{
if (ex.Message.Contains("401"))
{
}
}
}
答案 0 :(得分:0)
我怀疑问题是你没有处置WebResponse
。这意味着连接池认为连接仍在使用中,并且会等待响应处理,然后再将其用于其他请求。需要连接以获取请求流,除非终结器在有用的时间启动,因此超时,否则它将不可用。
只需使用响应更改代码即可使用using
语句 - 或者在您的情况下,使用finally
块可能会更复杂一些,因为您在{{1}内分配它阻止。 (我们无法真正看到你如何使用响应,这使得很难给出示例代码。但从根本上说,你需要处理它。)