.net WebClient未处理KeepAlive-将不需要的文本添加到JSON正文
我有一个很奇怪的问题,我似乎找不到。我将小的JSON对象发布到一个Web服务,并获取表示为字符串的大JSON对象。我遇到的问题是,在返回的JSON对象中,我随机得到以下文本: DNT:1连接:关闭 当我尝试对JSON进行反序列化时,这显然会引发问题。起初是消息正文中的Expect100 Continue,然后是KeepAlive,现在是连接:Close。我只是使用标准WebClient,但我创建了一个新类,该类继承自WebClient,因此我可以正确设置标题,如下所示:.net WebClient未处理KeepAlive-将不需要的文本添加到JSON正文,.net,json,webclient,.net,Json,Webclient,我有一个很奇怪的问题,我似乎找不到。我将小的JSON对象发布到一个Web服务,并获取表示为字符串的大JSON对象。我遇到的问题是,在返回的JSON对象中,我随机得到以下文本: DNT:1连接:关闭 当我尝试对JSON进行反序列化时,这显然会引发问题。起初是消息正文中的Expect100 Continue,然后是KeepAlive,现在是连接:Close。我只是使用标准WebClient,但我创建了一个新类,该类继承自WebClient,因此我可以正确设置标题,如下所示: public class
public class CustomWebClient : WebClient
{
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).KeepAlive = false;
(request as HttpWebRequest).ServicePoint.Expect100Continue = false;
}
return request;
}
}
下面是我的呼叫实现:
using (var webClient = new CustomWebClient())
{
webClient.Proxy = null;
webClient.Headers[HttpRequestHeader.ContentType] = Constants.HttpJSONencodedHeader;
return webClient.UploadData(request.Url, Constants.HttpPostVerb, Encoding.ASCII.GetBytes(request.Params.GetFormattedJSon()));
}
我所期待的是一个JSON对象,它看起来如下所示:
(简体)
这就是偶尔随机出现的情况:
"280950": {
"min": 1.0,
"max": 1.0,
"count": 1,
"missing": 0,
"distinctValues": [1],
"countDistinct": 1,
"sum": 1.
DNT: 1
Connection: close "stddev": 0.0,
"facets": {}
}
要强调的部分是在JSON对象的中间有这个权限:
.
DNT: 1
Connection: close
如有任何帮助/建议,将不胜感激
编辑:响应的文本大小约为8MB,因此我不想发布完整响应,但以下是标题:
HTTP/1.0 200 OK
Set-Cookie: ServerID=1139; path=/
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ServiceStack/3.971 Win32NT/.NET
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Access-Control-Allow-Origin: *
Date: Tue, 31 Mar 2015 15:42:41 GMT
Connection: close
Content-Length: 5802075
编辑#2:
网络布局:
Client - ASP.NET 4.0 (IIS 7, Server 2012)
Web Service - ASP.NET 4.0 ServiceStack v3.9.71.0
SOLR 5 - Jetty (Linux, iunno some flavour)
你有没有看过像Wireshark这样的网站的流量?听起来这可能是正在使用的web服务器中的一个bug…嘿,Jon-所以实际上是一个web服务(a)调用另一个调用SOLR的web服务(B)。我已经捕获了B&A之间fiddler的流量,并看到了其中的内容。对,所以你应该检查一下答案是什么样的-理想情况下,将它们包括在问题中。WebClient似乎不太可能开始将响应头放在正文中…嘿,Jon-响应是8MB的JSON,所以我不想发布整个正文。响应头看起来都很好,主体只是一堆JSON,在主体中的某个地方有DNT:1连接:close。这种情况并不总是发生,也不会在响应很小的情况下发生(如果“Connection:close”在主体中(而不是在标题中),那么这是服务器的错误……客户端(发出请求)如何向响应中添加文本?
Client - ASP.NET 4.0 (IIS 7, Server 2012)
Web Service - ASP.NET 4.0 ServiceStack v3.9.71.0
SOLR 5 - Jetty (Linux, iunno some flavour)