Pregunta
A menudo uso el servicio web de esta manera.
public void CallWebservice()
{
mywebservice web = new mywebservice();
web.call();
}
pero a veces hago esto
private mywebservice web;
public Constructor()
{
web = new mywebservice();
}
public void CallWebservice()
{
web.call();
}
El segundo enfoque me gusta mucho pero a veces se agota y tuve que iniciar la aplicación nuevamente, el primero creo que trae sobrecarga y no es muy eficiente, de hecho, a veces la primera llamada devuelve una WebException - ConnectFailure (I no sé por qué).
Encontré un artículo (Problemas del servicio web (¿una luz al final del túnel?)) que excede el tiempo de espera y convierte la propiedad KeepAlive en falsa en la función anulada GetWebRequest, aquí está el 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
La pregunta es, ¿es posible extender para siempre el tiempo de espera del servicio web y, finalmente, cómo implementa sus servicios web para manejar este problema?
Solución
Las clases generadas por Visual Studio para servicios web son simplemente servidores proxy con poco estado, por lo que crearlas es bastante económico.No me preocuparía por el consumo de memoria para ellos.
Si lo que buscas es una forma de llamar al método web en una línea, simplemente puedes hacer esto:
new mywebservice().call()
Salud