我创建了一个基于BasicHttpBinding
的简单基于REST的WCF服务。在我的一个WebMethod中,我正在返回一条指向JSON响应的流。
该方法看起来像:
[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
您可以在JSON响应上看到"Statu
之后,流将重置并从一开始就开始获取数据。
对我来说看起来很奇怪。
*从服务器端,当我放置断点时,MemoryStream
似乎具有正确的响应。
抛开使用内存流的问题,我最近遇到了一个类似的问题,其中内存流响应似乎是损坏的,看似随机。解决此问题的解决方案是从Web.config中删除我以DEV模式打开的图片。这可能是您的问题,也可能不是您的问题,但值得一看。似乎也在.NET 4.5中存在此问题。