Domanda

Utilizzo spesso il servizio web in questo modo

public void CallWebservice()

{

  mywebservice web = new mywebservice();

  web.call();

}

ma a volte lo faccio

private mywebservice web;

public Constructor()
{

  web = new mywebservice();

}

public void CallWebservice()
{

  web.call();

}

Il secondo approccio mi piace molto ma a volte va in timeout e devo riavviare l'applicazione, il primo credo porti un sovraccarico e non sia molto efficiente, infatti a volte la prima chiamata restituisce una WebException - ConnectFailure (I non so perché).

Ho trovato un articolo (Problemi del servizio Web (una luce alla fine del tunnel?)) che supera il timeout trasformando la proprietà KeepAlive in false nella funzione sostituita GetWebRequest, ecco il codice:

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 domanda è: è possibile estendere per sempre il timeout del servizio web e, infine, come implementare i servizi web per gestire questo problema?

È stato utile?

Soluzione

Le classi generate da Visual Studio per i servizi Web sono solo proxy con poco stato, quindi crearle è piuttosto economico.Non mi preoccuperei del consumo di memoria per loro.

Se quello che stai cercando è un modo per chiamare il webmethod in una riga puoi semplicemente farlo:

new mywebservice().call()

Saluti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top