Вопрос
Я часто использую веб-сервис таким образом
public void CallWebservice()
{
mywebservice web = new mywebservice();
web.call();
}
но иногда я делаю это
private mywebservice web;
public Constructor()
{
web = new mywebservice();
}
public void CallWebservice()
{
web.call();
}
Второй подход мне очень нравится, но иногда время ожидания истекает, и мне приходилось запускать приложение снова, первый, я думаю, приносит накладные расходы, и он не очень эффективен, на самом деле, иногда первый вызов возвращает WebException - ConnectFailure (я не знаю почему).
Я нашел статью (Проблемы с веб-сервисом (Свет в конце туннеля?)), превышающий время ожидания, по истечении которого свойство KeepAlive принимает значение false в переопределенной функции GetWebRequest, вот код:
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
Вопрос в том, возможно ли навсегда продлить время ожидания веб-сервиса и, наконец, как вы реализуете свои веб-сервисы для решения этой проблемы?
Решение
Классы, созданные Visual Studio для веб-сервисов, - это просто прокси с небольшим состоянием, поэтому их создание обходится довольно дешево.Я бы не стал беспокоиться о потреблении памяти для них.
Если то, что вы ищете, - это способ вызвать webmethod в одной строке, вы можете просто сделать это:
new mywebservice().call()
Ваше здоровье