質問

WCFに実装されたREST Webサービスがあります。これらのサービスに「Bad Request」を返させたいxmlに無効な要素が含まれている場合。

xmlシリアル化はXmlSerializerによって処理されています。デフォルトでは、XmlSerializerは不明な要素を無視します。 XmlSerializer.UnknownElementをフックしてこのハンドラーから例外をスローすることは可能ですが、これはWCFにあるため、シリアル化を制御することはできません。この動作を実装する方法のアイデア。

役に立ちましたか?

解決

" XmlSerializer.UnknownElementをフックしてこのハンドラーから例外をスローすることはできますが、これはWCFにあるため、シリアル化を制御することはできません"

実際にこれを行うことは可能です...

私が取り組んだWCFプロジェクトでは、IDispatchMessageFormatterインターフェイスを使用して同様のことを行いました。

詳細については、をご覧ください。 http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

これにより、メッセージヘッダーのピーク、シリアル化/逆シリアル化の制御、ステータスコードの戻りなどが可能になります。

他のヒント

おそらく、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)
    {
        ...
    }

完全な答えではありませんが、正しい道に進む可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top