【问题标题】:Windows Ce Compact Framework HttpWebRequestWindows Ce 精简框架 HttpWebRequest
【发布时间】:2017-05-16 07:05:02
【问题描述】:

我正在尝试使用rest apicontroller 上写入一些数据。

但是发生了一些奇怪的事情。前 1、2、3 次写入都很好,但应用程序冻结并出现超时异常,我没有关闭什么吗?

这是下面的code

        WebRequest client = (read) ? HttpWebRequest.Create(ReadUri) : HttpWebRequest.Create(WriteUri);
        client.Method = "POST";
        client.ContentType = "application/json";
        CredentialCache creds = new CredentialCache();
        creds.Add(new Uri(WriteUri), "Basic", new NetworkCredential(*******));
        client.Credentials = creds;
        client.PreAuthenticate = true;
        ((HttpWebRequest)client).AllowWriteStreamBuffering = true;
        client.Timeout = 10000;
        //Skipped all data formatting
        byte[] data = Encoding.UTF8.GetBytes(req);
        client.ContentLength = data.Length;
        Stream dataStream = null; 
        try
        {
            //HttpWebResponse response = (HttpWebResponse)client.GetResponse();
            dataStream = client.GetRequestStream();

            dataStream.Write(data, 0, data.Length);
            dataStream.Flush();
            dataStream.Close();
            dataStream.Dispose();
            dataStream = null;

        }
        catch (WebException we)
        {
            string message = we.Message;
        }
        finally
        {
            client = null;
        }

【问题讨论】:

  • 您可能应该得到响应(在写入请求流之后)并处理它以从连接中释放请求。否则,它会保留响应数据,直到您决定从中读取。将client 设置为null 不会释放任何东西(无论如何不会立即释放)。
  • 我试着听了回复并工作了:) 谢谢!如果你回答我会投票给你,否则我会投票给你。

标签: c# httpwebrequest compact-framework windows-ce


【解决方案1】:

发送请求后,您应该处理响应并处理它。如果您不这样做,则在后台,请求及其响应将保持与连接相关联,并且 .NET 默认情况下只有少数可用于WebRequests 的连接。

...
dataStream.Close();
dataStream.Dispose();
dataStream = null;
using (HttpWebResponse response = (HttpWebResponse)client.GetResponse())
{
}

【讨论】:

    猜你喜欢
    • 2011-12-13
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 2010-09-13
    相关资源
    最近更新 更多