質問
WCFに実装されたREST Webサービスがあります。これらのサービスに「Bad Request」を返させたいxmlに無効な要素が含まれている場合。
xmlシリアル化はXmlSerializerによって処理されています。デフォルトでは、XmlSerializerは不明な要素を無視します。 XmlSerializer.UnknownElementをフックしてこのハンドラーから例外をスローすることは可能ですが、これはWCFにあるため、シリアル化を制御することはできません。この動作を実装する方法のアイデア。
解決
" XmlSerializer.UnknownElementをフックしてこのハンドラーから例外をスローすることはできますが、これはWCFにあるため、シリアル化を制御することはできません"
実際にこれを行うことは可能です...
私が取り組んだWCFプロジェクトでは、IDispatchMessageFormatterインターフェイスを使用して同様のことを行いました。
これにより、メッセージヘッダーのピーク、シリアル化/逆シリアル化の制御、ステータスコードの戻りなどが可能になります。
他のヒント
おそらく、IXmlSerializableを実装する独自の型を返し、ReadXmlメソッドとWriteXmlメソッドで必要な例外をスローできます...
すべてのコードが手元にないため、これは漠然としたメモリからのものですが、カスタムメッセージ(クラス" Message"を継承)タイプを作成して、RESTサービスに戻り、作成する特定のメソッドをオーバーライドできますカスタム応答。
protected override void OnWriteMessage(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteStartBody(XmlDictionaryWriter writer)
{
...
}
protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
{
...
}
完全な答えではありませんが、正しい道に進む可能性があります。