gpt4 book ai didi

c# - 在 WCF 中使用 HttpClient 强制关闭连接

转载 作者:行者123 更新时间:2023-12-03 07:49:46 24 4
gpt4 key购买 nike

我们使用 WCF 的“Rest 工具包”中的 HttpClient 类 ( http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24644 ) 来连接我们创建的 Rest 服务器。

服务器当前总是关闭连接,无论“连接” header 如何(它正在开发中,所以现在可以)。

如何告诉 HttpClient 实例始终关闭连接(或接受服务器关闭连接)?我尝试添加“Connection: close” header ,但导致出现异常(“connection”不是允许的 header )。我还尝试设置 DefaultHeaders.Connection.Close = true,但这似乎没有任何区别。 POST 完成后我仍然可以看到与 netstat 的连接。

(bodyuri 是字符串)

HttpClient client = new HttpClient();
client.DefaultHeaders.Connection = new Connection();
client.DefaultHeaders.Connection.Close = true;
HttpContent content = HttpContent.Create(body);
HttpResponseMessage res = client.Post(new Uri(uri), content);

这里的问题是,下次我们执行 POST 时,调用就会阻塞。我们认为这是因为连接是由客户端保持事件的,而服务器不支持这一点。

最佳答案

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

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

使用response.Dispose() - 底层连接可能无法启动新连接/发送字节,直到您完成读取待处理的字节

client.DefaultHeaders.Add("连接", "关闭");应该可以——如果您遇到异常,请在 codeplex 网站上提出问题

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

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

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

关于c# - 在 WCF 中使用 HttpClient 强制关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/968657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com