Expect100Continue em serviços WCF

by Israel Aece 28. March 2010 21:44

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>

Tags: ,

WCF

Comments

3/29/2010 8:31:56 AM #

Odair Junior

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.

Odair Junior Brazil

5/13/2010 4:27:49 PM #

Thiago

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

Thiago Brazil

12/6/2011 9:04:20 AM #

pingback

Pingback from blogdonava.wordpress.com

WCF services e HTTP 407 Proxy Authentication Required « blogdonava

blogdonava.wordpress.com

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host