Expect100Continue em serviços WCF


Por padrão, todas as requisições HTTP que são relizadas pelas classes que estão contidas no namespace System.Net, adicionam um header chamado “Expect: 100-continue”. A finalidade deste header, criado a partir da versão 1.1 do HTTP, quando é implementado corretamente pelos servidores Web, servem para que o servidor, baseando-se apenas nos headers da requisição, determine se a mensagem será ou não aceitada por ele, sem a necessidade de enviar toda a mensagem para depois rejeitá-la.

Quando você tenta consumir um serviço WCF exposto através do protocolo HTTP, eventualmente poderá receber a seguinte mensagem de erro: The remote server returned an unexpected response: (417) Expectation failed. Provavelmente isso pode ser pela má implementação deste recurso do protocolo, que evita conseguirmos consumir o serviço. Para resolver este problema precisamos desativar o envio deste header, que acaba provocando este comportamento. Para isso, podemos recorrer à propriedade estática Expect100Continue da classe ServicePointManager, que recebe um valor boleano (que por padrão é True), indicando se este recurso está ou não habilitado. No nosso caso, devemos definí-la como False antes da chamada da operação do serviço:

System.Net.ServicePointManager.Expect100Continue = false;

Ou, para ficar mais flexível, utilizando o arquivo de configuração:

<system.net>
  <settings>
    <servicePointManager expect100Continue=”false”/>
  </settings>
</system.net>

Anúncios

2 comentários sobre “Expect100Continue em serviços WCF

  1. Obrigado Israel, este post vai ajudar e muito, assim como os outros ajudaram. Ainda estou começando a entender a plataforma .Net, e gostando muito, e novamente parabéns pelo bom trabalho.

    • Israel

      Estive enfrentando problemas de conexão quando consumia serviços do WebService da prefeitura de Belo Horizonte.
      Estava enviando duas requisições em um curtíssimo espaço de tempo, e a segunda requisição sempre falhava: "The request was aborted: Could not create SSL/TLS secure channel".
      Quando setei Expect100Continue para false, resolveu o problema.

      Muito bom artigo, fortaleceu a solução que havia encontrado
      Obrigado

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s