Лучшая практика для веб-сервисов

Я создал веб-сервис, и когда я хочу использовать его методы, я создаю его экземпляр в процедуре, вызываю метод и, наконец, удаляю его, однако я думаю, что также можно было бы создать экземпляр веб-сервиса в «приватной пустоте. 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();
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
750
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это зависит от того, как часто вы собираетесь вызывать веб-службу. Если вы собираетесь вызывать его почти постоянно, вероятно, лучше использовать метод №2. Однако, если он не будет вызываться так часто, вам лучше использовать метод №1 и создавать его экземпляр только тогда, когда он вам нужен.

Прямо сейчас я сделал решение для мобильного устройства, и оказалось, что оно используется в нерегулярное время, его можно использовать за 10 минут, 1 час, 4 часа, это очень вариативно, кажется, что лучший подход - первая стратегия.

В прошлом году мы работали над проектом, в котором использовали веб-сервисы. Дело в том, что мы создали экземпляры наших веб-сервисов в процедуре Sub New (), и она работает очень хорошо, однако иногда некоторые пользователи заявляли нам, что они просыпаются со своих стульев и когда они вернулись и попытались продолжить работу с приложением, они получили сообщение об ошибке тайм-аута, и им пришлось повторно войти в систему.

Мы думаем, что, возможно, это было нормально, потому что, возможно, пользователи очень долго выходили со своих мест, но однажды во время презентации приложения с генеральным директором произошел точно такой же сценарий, и лично мне такое поведение не понравилось и вот почему вопрос.

Спасибо за ответ.

Другие вопросы по теме