我使用Topshelf运行服务,Topshelf查询专有CRM系统的数据。此服务为此CRM系统提供REST前端。一切正常,我收到了JSON格式的回复。
我有一个特定的查询,它返回接近500KB的JSON响应。这适用于本地Intranet中的计算机,但是当与VPN连接时,连接速度有点慢,并且突然响应部分被接收,刷新后我得到剩余部分。
有没有办法确保将完整的缓冲区发送给客户端?
我使用以下代码:
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(data);
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.ContentLength64 = buffer.Length;
context.Response.Headers.Add("Content-Type", contentType);
context.Response.OutputStream.Write(buffer, 0, buffer.Length);
context.Response.OutputStream.Close();
答案 0 :(得分:0)
我在这里看到的第一件事是你实际上没有调用context.Response.Close,你需要这样做。关闭响应将关闭流,但关闭流不会记录(据我所知),也可以关闭响应。关闭响应也会关闭请求对象,这也不会在此处关闭。
这可能会解决问题。我可以想象在VPN测试中除了网络速度之外还有其他差异; VPN测试可能来自浏览器或仅支持HTTP 1.0的代理服务器,这意味着他们会在思考之前关闭连接(或者它们可能是HTTP 1.1,但发送连接:在标题中关闭)他们收到了整个回复。在输出流上调用Close可能不会关闭套接字,但在响应本身上调用close会,这可能最终会解决您的问题。
希望这对将来读书的人有所帮助。
哈罗德