0

我创建了一个简单的基于 REST 的 WCF 服务,它在BasicHttpBinding. 在我的一种网络方法中,我返回了一个指向 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

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

我觉得很奇怪。

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

4

1 回答 1

3

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

于 2012-12-21T21:57:52.473 回答