C#GetRequestStream()outlook加载项“操作已超时”

时间:2013-11-29 06:35:18

标签: c# rest outlook add-in outlook-addin

美好的一天。

我真的需要帮助解决这个问题。我在这里尝试了所有可能的选择。

我在使用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"))
    {
    }
}
}

1 个答案:

答案 0 :(得分:0)

我怀疑问题是你没有处置WebResponse。这意味着连接池认为连接仍在使用中,并且会等待响应处理,然后再将其用于其他请求。需要连接以获取请求流,除非终结器在有用的时间启动,因此超时,否则它将不可用。

只需使用响应更改代码即可使用using语句 - 或者在您的情况下,使用finally块可能会更复杂一些,因为您在{{1}内分配它阻止。 (我们无法真正看到你如何使用响应,这使得很难给出示例代码。但从根本上说,你需要处理它。)