2

WCF にいくつかの REST Web サービスを実装しています。XMLに無効な要素が含まれている場合、これらのサービスが「Bad Request」を返すようにしたいと考えています。

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

4

3 に答える 3

2

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

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

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

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

メッセージヘッダーのピーク、シリアライゼーション/デシリアライゼーションの制御、ステータスコードのリターンなどを可能にします。

于 2009-07-01T11:30:34.640 に答える
1

おそらく、IXmlSerializable を実装する独自の型を返し、必要な例外を ReadXml および WriteXml メソッドでスローすることができます...

于 2008-10-02T16:15:28.323 に答える
1

This is from vague memory as I don't have all the code to hand, but you can create a custom Message (inherit for the class "Message") type to return in your REST services and override certain methods to create custom responses.

    protected override void OnWriteMessage(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartBody(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        ...
    }

Not a complete answer, but might push you down the right path.

于 2008-10-02T16:31:35.380 に答える