我们有一个REST API,使用WCF构建。使用流并关闭流时发生错误的WebFaultException
我们处理与WebFaultException后端像这样的所有异常:
throw new WebFaultException<string>(e.Message, HttpStatusCode.NotAcceptable);
在这里我们做一个帖子这个工程除了在一个场景就好了,甲流。
这样的一个例子:
[WebInvoke(Method = "POST", UriTemplate = "saveUser?sessionId={sessionId}&userId={userId}",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
[OperationContract]
string SaveUser(string sessionId, int userId, Stream stream);
当using语句处理这个流,当我们再碰上我们不断收到一个例外:
从小提琴手:
HTTP/1.1 400 Bad Request
<p>The server encountered an error processing the request. The exception message is 'The message object has been disposed.'. See server logs for more details. The exception stack trace is: </p>
<p> at System.ServiceModel.Channels.ByteStreamMessage.InternalByteStreamMessage.get_Properties()
at System.ServiceModel.OperationContext.get_IncomingMessageProperties()
at System.ServiceModel.Dispatcher.WebErrorHandler.ProvideFault(Exception error, MessageVersion version, Message& fault)</p>
看起来它与流和StreamRead有关呃被处置。
然后,我试图删除任何将放置StreamReader,这acctualy的作品。现在处理这个代码看起来是这样的:
这解决了与发送正确的异常信息的问题,而是如何不好这会不会影响我们的应用程序,不关闭或处置我们的StreamReader? 你有没有看到解决这个问题的其他方法?