Я создал веб-сервис, и когда я хочу использовать его методы, я создаю его экземпляр в процедуре, вызываю метод и, наконец, удаляю его, однако я думаю, что также можно было бы создать экземпляр веб-сервиса в «приватной пустоте. Main_Load (объект-отправитель, EventArgs e) "событие.
Дело в том, что если я сделаю это первым способом, мне придется создавать экземпляр веб-сервиса каждый раз, когда мне нужен один из его методов, но с другой стороны, я должен постоянно поддерживать подключение веб-сервиса, когда я, например, использую его в форме.
Я хотел бы знать, какая из этих практик лучше, и есть ли способ сделать это лучше.
Стратегия 1
private void btnRead_Click(object sender, EventArgs e)
{
try
{
//Show clock
this.picResult.Image = new Bitmap(pathWait);
Application.DoEvents();
//Connect to webservice
svc = new ForPocketPC.ServiceForPocketPC();
svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
svc.AllowAutoRedirect = false;
svc.UserAgent = Settings.UserAgent;
svc.PreAuthenticate = true;
svc.Url = Settings.Url;
svc.Timeout = System.Threading.Timeout.Infinite;
svc.CallMethod();
...
}
catch (Exception ex)
{
ShowError(ex);
}
finally
{
if (svc != null)
svc.Dispose();
}
}
Стратегия 2
private myWebservice svc;
private void Main_Load(object sender, EventArgs e)
{
//Connect to webservice
svc = new ForPocketPC.ServiceForPocketPC();
svc.Credentials = new System.Net.NetworkCredential(Settings.UserName, Settings.Password);
svc.AllowAutoRedirect = false;
svc.UserAgent = Settings.UserAgent;
svc.PreAuthenticate = true;
svc.Url = Settings.Url;
svc.Timeout = System.Threading.Timeout.Infinite;
}
private void btnRead_Click(object sender, EventArgs e)
{
try
{
//Show clock
this.picResult.Image = new Bitmap(pathWait);
Application.DoEvents();
svc.CallMethod();
...
}
catch (Exception ex)
{
ShowError(ex);
}
}
private void Main_Closing(object sender, CancelEventArgs e)
{
svc.Dispose();
}





Это зависит от того, как часто вы собираетесь вызывать веб-службу. Если вы собираетесь вызывать его почти постоянно, вероятно, лучше использовать метод №2. Однако, если он не будет вызываться так часто, вам лучше использовать метод №1 и создавать его экземпляр только тогда, когда он вам нужен.
Прямо сейчас я сделал решение для мобильного устройства, и оказалось, что оно используется в нерегулярное время, его можно использовать за 10 минут, 1 час, 4 часа, это очень вариативно, кажется, что лучший подход - первая стратегия.
В прошлом году мы работали над проектом, в котором использовали веб-сервисы. Дело в том, что мы создали экземпляры наших веб-сервисов в процедуре Sub New (), и она работает очень хорошо, однако иногда некоторые пользователи заявляли нам, что они просыпаются со своих стульев и когда они вернулись и попытались продолжить работу с приложением, они получили сообщение об ошибке тайм-аута, и им пришлось повторно войти в систему.
Мы думаем, что, возможно, это было нормально, потому что, возможно, пользователи очень долго выходили со своих мест, но однажды во время презентации приложения с генеральным директором произошел точно такой же сценарий, и лично мне такое поведение не понравилось и вот почему вопрос.
Спасибо за ответ.