Arquivo

Textos com Etiquetas ‘Microsoft’

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.

21 de junho de 2010

Na semana passada estávamos mexendo em uma aplicação desenvolvida em .NET 2.0. O objetivo era incluir uma nova funcionalidade que dependia de um Web Service SOAP de terceiros.

Para fazer a nova implementação o mais rápido possível, utilizamos o recurso “Add Web Reference…” do Visual Studio 2005 para criar um proxy para o Web Service que queríamos consumir.

Fazendo isso, o Visual Studio 2005 gera algumas classes no arquivo Reference.cs (para visualizá-lo é preciso estar com a opção “Show all files” habilitada na janela Solution Explorer).

A partir dessas classes você pode fazer a comunicação com o Web Service através de simples chamadas de métodos.

CalcPrecoPrazoWS proxy = new CalcPrecoPrazoWS();
Resultado resultado = proxy.Calcular("03478010", "13500313", "0,456");

O problema

Até aqui tudo certo, mas quando testamos a aplicação fazendo a chamada do Web Service, aconteceu o seguinte erro:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.
at System.Web.Services.Protocols.WebClientProtocol.Ge tWebResponse(WebRequest request)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

Depois de pesquisarmos um pouco, descobrimos que as possíveis causas desse problema são:

  • Quando o servidor do Web Service inesperadamente fecha a conexão
  • O time out do servidor do Web Service é muito baixo
  • O servidor do Web Service “reseta” a conexão inesperadamente, algo como uma exceção não tratada

A solução

Quando você chama um método da classe proxy, no exemplo acima a classe CalcPrecoPrazoWS, internamente a classe SoapHttpClientProtocol, que é a classe base do nosso proxy, aciona seu método protegido GetWebRequest, que irá fazer um requisição Web através da classe WebRequest.

Para não mantermos a “conexão viva” na requisição Web, sobrescrevemos o método GetWebRequest da classe SoapHttpClientProtocol, convertendo um objeto WebRequest em um objeto HttpWebRequest e configurando a propriedade KeepAlive para false antes de acionar a requisição.

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
    webRequest.KeepAlive = false;
    webRequest.ProtocolVersion = HttpVersion.Version10;

    return webRequest;
}

Isso pode ser feito no próprio arquivo Reference.cs, dentro da classe proxy que foi gerada pelo Visual Studio 2005. Mas qualquer alteração na referência Web, o Visual Studio 2005 irá gerar novamente o código do arquivo Reference.cs e seu código será apagado.

Então a melhor maneira de fazer isso é utilizar os recursos de classes parciais do .NET e separar seu código em um arquivo separado, como mostrado no exemplo abaixo:

public partial class CalcPrecoPrazoWS
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
        webRequest.KeepAlive = false;
        webRequest.ProtocolVersion = HttpVersion.Version10;

        return webRequest;
    }
}

Mas não é só isso

Há também um série de outras causas para esse problema, bem como outras possíveis soluções, inclusive quando você está usando WCF no .NET 3.5.

A solução que apresentei funcionou no meu caso. Se ela não resolver seu problema, vale a pena investigar nesse artigo do suporte da Microsoft que lista possíveis causas e soluções:

You receive one or more error messages when you try to make an HTTP request in an application that is built on the .NET Framework 1.1 Service Pack 1
http://support.microsoft.com/kb/915599

Esse artigo é um tanto confuso e mal organizado, mas já é um bom começo.

.NET , , , , , ,

Enterprise Library 5.0 release final liberada para download

26 de abril de 2010

Microsoft Enterprise Library é uma coleção de blocos de código desenhados para auxiliar desenvolvedores .NET com tarefas comuns de desenvolvimento.

Esta versão inclui:

  • Caching Block
  • Cryptography Block
  • Data Access Block
  • Exception Handling Block
  • Logging Block
  • Policy Injection Block
  • Security Block
  • Validation Block
  • Unity

A melhor versão da Enterprise Library contém novas características e atualizações que irão deixar os desenvolvedores .NET mais produtivos. Entre elas estão:

  • Refatoração da arquitetura que provê testabilidade e manutenabilidade através de um completo suporte à injeção de dependência
  • Contêiner de injeção de dependência independente (Unity é entregue com Enterprise Library, mas você pode substituí-lo por um outro contêiner de sua preferência)
  • Suporte à configuração programática, incluindo uma interface de configuração fluente e um esquema XSD para permitir IntelliSense
  • Reformulação da ferramenta de configuração
  • Processamento de resultados de consultas de dados mais intuitivo
  • Suporte a acesso de dados assíncrono
  • Atributos de validação entre Validation Application Block e DataAnnotations
  • Integração com mecanismos de validação do Windows Presentation Foundation (WPF)
  • Suporte a cenários de configuração complexos, o que inclui mesclagem de múltiplos arquivos de configuração
  • Liberação de cachê otimizada
  • Melhor performance para operações de log
  • Redução do número de assemblies
  • Suporte ao .NET Framework 4.0 e integração com Visual Studio 2010
  • Melhorias no Unity

Para fazer o download da Enterprise Library 5.0, bem como documentação, detalhes da versão, extensões e vídeos, acesse o link abaixo:
http://msdn.microsoft.com/en-us/library/ff632023.aspx

.NET, Arquitetura , , , , , , ,

A promoção Segunda Chance de certificações Microsoft voltou

5 de fevereiro de 2010

A promoção Segunda Chance (”Second Shot”, em inglês) voltou para lhe ajudar a passar em seu próximo exame de certificação Microsoft. Essa promoção lhe dá o direito de refazer um exame caso você não consiga passar na primeira tentativa.

Você deve realizar tanto o primeiro e o segundo exame (se necessário) antes de 30 de junho de 2010. A promoção é valida para todos os exames de certificações Microsoft Learning IT professional, developer, project management, e Microsoft Dynamics.

Para se cadastrar na promoção Segunda Chance, siga as instruções dessa página:
http://www.microsoft.com/learning/Career/en/us/career-offer.aspx#certification

.NET , , , ,

Vídeos da PDC 2009 estão disponíveis

29 de novembro de 2009

Nos dias 17 a 19 de novembro, aconteceu em Los Angeles a PDC 2009, Professional Developers Conference, evento anual organizado pela Microsoft para desenvolvedores focados nas plataformas de desenvolvimento da empresa.

A organização do evento disponibilizou mais de 200 vídeos (e alguns slides) das apresentações para download. Para baixar os vídeos acesse esse endereço.

.NET, Eventos , , , , ,

MSDN Magazine: revista grátis sobre .NET

5 de setembro de 2009

Desde que comecei a desenvolver em .NET sempre gostei de ler alguma revista a respeito. Atualmente assino a revista Mundo .NET, mas antigamente eu assinava a .NET Magazine, que na época era MSDN Magazine Brasil. Quando ela deixou de ser MSDN Magazine Brasil para virar .NET Magazine, houve uma grande mudança editoral e na minha opinião o seu conteúdo deixou a desejar.

Por conta disso, procurei pela MSDN Magazine original e, para minha surpresa e felicidade, descobri que sua versão online é totalmente gratuita. A qualidade e diversidade dos artigos são muita boas e entre os autores estão nomes importantes como Dino EspositoJeremy MillerJohn Papa.

A versão online também está disponível em português, mas recomendo verozmente que você fique longe dela, pois a mesma é feita através de um tradutor automático. As primeiras edições disponibilizadas em português eram traduzidas por humanos, então até pode ser que você encontre algum artigo antigo em português que não contenha nenhum absurdo de tradução.

Na verdade, agora estou realmente pensando em não mais assinar a Mundo .NET e acompanhar somente a MSDN Magazine, pois de algumas edições para cá o conteúdo da Mundo .NET tem me decepcionado.

Em resumo, a MSDN Magazine é uma revista americana, mantida pela própria Microsoft, de publicação mensal, com versão impressa paga e versão online grátis.

Você pode acessá-la utilizando o endereço abaixo:
http://msdn.microsoft.com/en-us/magazine/default.aspx

.NET , , , ,

Prometric oferece até 25% de desconto em exames Microsoft

5 de setembro de 2009

A Prometric está com uma promoção onde você pode obter 15%, 20% ou 25% de desconto ao se registrar para um exame de certificação Microsoft.

Para participar da promoção “Take control of your career”, basta acessar a página da promoção, escolher um dos exames com desconto e se registrar no mesmo. Entre as opções, há exames de certificação em .NET, SQL Server e Windows.

A promoção é válida para exames agendados até 31 de dezembro de 2009.

Para mais informações e participar da promoção, acesse o link abaixo:
http://www.prometric.com/microsoft/careeroffer.htm

.NET , , , , , , , ,