私はこのようなサービス契約があります(ParseWebMessageFormatがために列挙型の解析を包むための方法であることコードでWCFエラーメッセージの返信形式を設定するにはどうすればよいですか?
var selectedFormat = ParseWebMessageFormat(format);
WebOperationContext.Current.OutgoingResponse.Format = selectedFormat;
:コードで
[WebGet(UriTemplate = "getdata?key={key}&format={format}")]
Event[] GetIncidentsXml(string key, string format);
を、私はこのような応答フォーマットを切り替えています型)
この部分は正常に動作し、渡されたパラメータに応じてXMLまたはJSONを取得します。
ここでは、例外がスローされます。
<ServiceResponse xmlns="http://schemas.datacontract.org/2004/07/IBI.ATIS.Web.ServiceExceptions" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorCode>
<Code>100</Code>
<Msg>Invalid Key</Msg>
</ErrorCode>
<State>fail</State>
</ServiceResponse>
戻り値の型:例外がスローされると
var exception = new ServiceResponse
{
State = "fail",
ErrorCode = new ErrorDetail { Code = "100", Msg = "Invalid Key" }
};
throw new WebProtocolException(HttpStatusCode.BadRequest, "Invalid Key.", exception, null);
、戻り値の型は常に XMLです:渡されています(API)キーが無効である場合、私はこれをやっています変更はサービスメソッドのコードの最初の行であり、例外がスローされる前に発生しています。
リクエストフォーマットに基づいてタイプを返すようにWCFを設定することはできますが、クエリ文字列で渡されたタイプを使用する必要があります。
自動メッセージタイプが設定でオフになっている:
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="false" />
私はあなたに従うのか分からない。書式の型は、メソッドのパラメータです。成功した呼び出しは、呼び出しで指定された型として正しく返されます。これは、指定された出力形式で送信されないエラーメッセージだけです。リクエストヘッダーで何を探す必要がありますか? –
したがって、WCFは、エラーをスローすると、設定された出力タイプを無視します。うざい。私はそれが簡単な設定の変更か、私が見落としていたと思っていた。ご協力いただきありがとうございます。 –