MemoryStream数据损坏问题

问题描述 投票:0回答:1

我创建了一个基于REST的简单WCF服务,该服务在BasicHttpBinding上运行。在我的一个web方法中,我返回一个指向JSON响应的Stream。

方法如下:

[OperationContract]
[FaultContract(typeof(ApplicationFault))]
[WebInvoke(Method = "POST", UriTemplate = "GetActiveCalls/{nurseid}")]
Stream GetActiveCalls(string nurseid);

GetActiveCalls的身体,我正在创建一个MemoryStream的对象,并返回相同的响应。代码看起来像

// Serialize the results as JSON
string jsonResult = new JavaScriptSerializer().Serialize(baseResponses);

// ContentType json
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json";
WebOperationContext.Current.OutgoingResponse.Headers.Add("Cache-Control", "no-cache");
var bytes = Encoding.UTF8.GetBytes(jsonResult);
//Parse to memorystream
var ms = new MemoryStream(bytes);
ms.Seek(0, SeekOrigin.Begin);
ms.SetLength(bytes.LongLength);
return ms;

从客户端尝试这个时,我得到的结果就像

{"LastEvents":[{"FormatValues":"Klic 2 3 4","Icon":null,"Color":"Red","Acknowledged":false,"EventID":28566}],"Message":"","Status":true}

但有时在多次调用相同的方法后,我开始得到响应:

{"LastEvents":[{"FormatValues":"Klic 2 3 4","Icon":null,"Color":"Red","Acknowledged":false,"EventID":28566}],"Message":"","Statu{"LastEv

你可以在QSON响应之后看到"Statu,流被重置并从头开始获取数据。

这对我来说很奇怪。

*从服务器端,当我放置断点时,似乎MemoryStream有正确的响应。

c# wcf rest stream basichttpbinding
1个回答
3
投票

暂且不谈使用内存流的问题,我最近遇到了类似的问题,内存流响应似乎已损坏,似乎是随机的。解决这个问题的方法是从web.config中删除跟踪部分,这是我在开发模式下打开的。这可能是您的问题,也可能不是,但可能值得一看。好像这个问题在.NET 4.5中仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.