Pergunta

Eu tenho alguns serviços REST web implementado no WCF. Quero fazer estes serviços retornar "Bad Request" quando o XML contém elementos inválidos.

A serialização XML está sendo tratado pelo XmlSerializer. Por padrão XmlSerializer ignora elementos desconhecidos. Eu sei que é possível ligar XmlSerializer.UnknownElement e lançar uma exceção deste manipulador, mas porque este está em WCF Eu não tenho controle sobre a serialização. Alguma idéia de como eu poderia implementar este comportamento.

Foi útil?

Solução

"Eu sei que é possível ligar XmlSerializer.UnknownElement e lançar uma exceção deste manipulador, mas porque este está em WCF Eu não tenho controle sobre a serialização"

É realmente possível fazer isso ...

Em um projeto WCF que eu trabalhei, fizemos algo semelhante usando a interface IDispatchMessageFormatter.

Mais informação pode ser encontrada aqui http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

Ele permite que você pico nos cabeçalhos de mensagens, controle de serialização / desserialização, códigos de status de retorno etc.

Outras dicas

Talvez você possa voltar o seu próprio tipo de implementar IXmlSerializable e lançar a exceção que você quer no ReadXml e WriteXml ...

Esta é a partir vaga memória como eu não tenho todo o código para a mão, mas você pode criar uma mensagem personalizada (herdam para a classe "Mensagem") tipo para retornar em seus serviços REST e substituir determinados métodos para criar personalizado respostas.

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

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

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

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

Não é uma resposta completa, mas pode empurrá-lo para o caminho certo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top