Frage
Ich verwende den Webservice oft auf diese Weise
public void CallWebservice()
{
mywebservice web = new mywebservice();
web.call();
}
aber manchmal mache ich das
private mywebservice web;
public Constructor()
{
web = new mywebservice();
}
public void CallWebservice()
{
web.call();
}
Der zweite Ansatz gefällt mir sehr gut, aber manchmal kommt es zu einer Zeitüberschreitung und ich musste die Anwendung erneut starten. Der erste Ansatz bringt meiner Meinung nach Overhead mit sich und ist nicht sehr effizient. Tatsächlich gibt der erste Aufruf manchmal eine WebException zurück – ConnectFailure (I weiß nicht warum).
Ich habe einen Artikel gefunden (Web-Service-Probleme (Ein Licht am Ende des Tunnels?)), die das Zeitlimit überschreitet und die KeepAlive-Eigenschaft in der überschriebenen Funktion GetWebRequest auf „false“ setzt, ist hier der Code:
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
Die Frage ist, ob es möglich ist, das Webservice-Timeout dauerhaft zu verlängern, und schließlich: Wie implementieren Sie Ihre Webservices, um dieses Problem zu lösen?
Lösung
Die von Visual Studio für Webservices generierten Klassen sind lediglich Proxys mit geringem Status, sodass ihre Erstellung recht kostengünstig ist.Ich würde mir keine Sorgen über den Speicherverbrauch machen.
Wenn Sie nach einer Möglichkeit suchen, die Webmethode in einer Zeile aufzurufen, können Sie einfach Folgendes tun:
new mywebservice().call()
Prost