我有一个很大的JSON对象,需要从MVC ApiController返回。
我不能简单地将JSON对象作为序列化内容的内部序列化程序barfs返回,因为序列化的内容太长。
我不想序列化到字符串,然后返回字符串,因为我们可能处理5-6MB的数据,这似乎是浪费内存的目的。
我想要做的是使用Newtonsoft JSON序列化程序直接写入响应流。
Dim Ret = Client.Search(Model) ''Get the results object
Dim Response As New HttpResponseMessage()
Using MemoryStream As New IO.MemoryStream
Using StreamWriter As New StreamWriter(MemoryStream)
Using JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
End Using
End Using
Response.Content = New StreamContent(MemoryStream)
Return Response
End Using不幸的是,这会导致连接意外地被重置--我猜这是由于流在发送完结果之前被释放了吗?
即使我去掉了所有的Using块,并将所有内容留给GC,如下所示:
Dim Ret = Client.Search(Model)
Dim Response As New HttpResponseMessage()
Dim MemoryStream As New IO.MemoryStream
Dim StreamWriter As New StreamWriter(MemoryStream)
Dim JsonWriter As JsonWriter = New JsonTextWriter(StreamWriter)
Dim Serializer As New JsonSerializer
Serializer.Serialize(JsonWriter, Ret)
Response.Content = New StreamContent(MemoryStream)
Return Response我得到一个0字节的响应。谁能帮我指出正确的方向吗?
发布于 2012-12-01 04:18:24
原来这是我的一个愚蠢的错误..。我不是冲作家和重置溪流位置..。
JsonWriter.Flush()
MemoryStream.Seek(0, StreamPosition.Beginning)解决了这个问题
发布于 2012-11-09 08:33:05
您试过检查web.config/machine.config中的超时设置吗?也许IIS认为获得Response.Content所花费的时间太长了。
无论如何,你应该用使用跟踪失败的请求来检查这个问题--这应该会给你指明正确的方向。
https://stackoverflow.com/questions/13268237
复制相似问题