Pergunta

Costumo usar webservice dessa forma

public void CallWebservice()

{

  mywebservice web = new mywebservice();

  web.call();

}

mas às vezes eu faço isso

private mywebservice web;

public Constructor()
{

  web = new mywebservice();

}

public void CallWebservice()
{

  web.call();

}

A segunda abordagem me agrada muito mas às vezes atinge o tempo limite e tive que iniciar a aplicação novamente, a primeira acho que traz sobrecarga e não é muito eficiente, aliás, às vezes a primeira chamada retorna uma WebException - ConnectFailure (eu não sei porquê).

Encontrei um artigo (Problemas com o serviço da Web (uma luz no fim do túnel?)) que excede o tempo limite transformando a propriedade KeepAlive em false na função substituída GetWebRequest, aqui está o código:

Protected Overrides Function GetWebRequest(ByVal uri As System.Uri) As System.Net.WebRequest

  Dim webRequest As Net.HttpWebRequest = CType(MyBase.GetWebRequest(uri), Net.HttpWebRequest)

  webRequest.KeepAlive = False

  Return webRequest

End Function

A questão é: é possível estender para sempre o tempo limite do webservice e, finalmente, como você implementa seus webservices para lidar com esse problema?

Foi útil?

Solução

As classes geradas pelo Visual Studio para webservices são apenas proxies com pouco estado, portanto criá-las é bem barato.Eu não me preocuparia com o consumo de memória para eles.

Se o que você está procurando é uma maneira de chamar o webmethod em uma linha, você pode simplesmente fazer o seguinte:

new mywebservice().call()

Saúde

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