C# 在WCF中强制关闭与HttpClient的连接

C# 在WCF中强制关闭与HttpClient的连接,c#,wcf,http,rest,C#,Wcf,Http,Rest,我们正在使用WCF()的“Rest工具箱”中的HttpClient类来集成我们创建的Rest服务器 服务器当前总是关闭连接,不管“connection”头是什么(它正在开发中,所以现在还可以) 如何告诉HttpClient实例始终关闭连接(或接受服务器关闭连接)?我尝试添加“Connection:close”标题,但结果是出现了一个exeption(“Connection”不是允许的标题)。我还尝试设置DefaultHeaders.Connection.Close=true,但这似乎没有任何区别

我们正在使用WCF()的“Rest工具箱”中的HttpClient类来集成我们创建的Rest服务器

服务器当前总是关闭连接,不管“connection”头是什么(它正在开发中,所以现在还可以)

如何告诉HttpClient实例始终关闭连接(或接受服务器关闭连接)?我尝试添加“Connection:close”标题,但结果是出现了一个exeption(“Connection”不是允许的标题)。我还尝试设置DefaultHeaders.Connection.Close=true,但这似乎没有任何区别。在文章完成后,我仍然可以看到与netstat的连接

(正文和uri是字符串)


这里的问题是,下一次我们发帖子的时候,电话就被屏蔽了。我们认为这是由于客户端保持连接的活动性,而服务器不支持这一事实

处理完响应后,您是否尝试过处理它

// do stuff
res.Dispose();


您处理完响应后是否尝试过处理它

// do stuff
res.Dispose();


我编写了大部分HttpClient代码;以下是一些想法:

您不需要告诉HttpClient接受服务器关闭连接——它应该自动工作——无论客户端是否包含“connection:close”头,服务器都可以关闭连接

使用response.Dispose()--在读取挂起的字节之前,基础连接可能无法启动新连接/发送字节

client.DefaultHeaders.Add(“连接”、“关闭”);应该有效——如果您遇到异常,请在codeplex站点上打开一个问题

您可以检查response.Request.Headers以查看线路上发生了什么

您可以跳过Post(newuri(x))中的“newuri()”——传递一个字符串将为您调用正确的构造函数(newuri(x,UriKind.RelativeOrAbsolute))


默认情况下,超时与HttpWebRequest相同——您可能希望通过client.TransportSettings.ReadWriteTimeout/client.TransportSettings.ConnectionTimeout将其关闭,以区分永久阻塞和超时

我编写了大部分HttpClient代码;以下是一些想法:

您不需要告诉HttpClient接受服务器关闭连接——它应该自动工作——无论客户端是否包含“connection:close”头,服务器都可以关闭连接

使用response.Dispose()--在读取挂起的字节之前,基础连接可能无法启动新连接/发送字节

client.DefaultHeaders.Add(“连接”、“关闭”);应该有效——如果您遇到异常,请在codeplex站点上打开一个问题

您可以检查response.Request.Headers以查看线路上发生了什么

您可以跳过Post(newuri(x))中的“newuri()”——传递一个字符串将为您调用正确的构造函数(newuri(x,UriKind.RelativeOrAbsolute))

默认情况下,超时与HttpWebRequest相同--您可能希望通过client.TransportSettings.ReadWriteTimeout/client.TransportSettings.ConnectionTimeout将其关闭,以区分永久阻塞和超时

HttpClient中的IDisposable.Dispose(bool)实现为空。IDisposable.Dispose(bool)HttpClient中的实现为空。
using (HttpResponseMessage res = client.Post(new Uri(uri), content))
{
    // do stuff
}