WCFで構築されたREST APIがあります。ストリームを使用してストリームを閉じるときにWebFaultExceptionが発生する
throw new WebFaultException<string>(e.Message, HttpStatusCode.NotAcceptable);
これは、我々はストリームと、ポストを行う1つのシナリオ以外ではうまく動作します:
私たちは、すべての例外は、このようWebFaultExceptionとバックエンド処理します。
本の例:
[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を処理するものを削除しようとしましたが、この機能は有効です。
これは正しい例外メッセージを送信して問題を解決しますが、どのように悪いこれは、閉じたり、私たちのStreamReaderを配置していない、我々のアプリケーションに影響します。今、これを処理するコードは次のようになりますか? これを解決する他の方法がありますか?