Сведения о вопросе

Математик

19:47, 4th August, 2020

Теги

web-services    

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

Просмотров: 414   Ответов: 2

Я создал веб-сервис, и когда я хочу использовать его методы, я создаю его экземпляр в процедуре a, вызываю метод, и я, наконец, избавляюсь от него, однако я думаю, что также можно было бы создать экземпляр веб-сервиса в событии "private void Main_Load(object sender, EventArgs e)".

Дело в том, что если я делаю это первым способом, я должен создавать экземпляр webservice каждый раз, когда мне нужен один из его методов, но в другом случае я должен постоянно поддерживать связь с веб-сервисом, когда я использую его в форме, например.

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

Стратегия 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();
}



  Сведения об ответе

appple

21:06, 1st October, 2020

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


  Сведения об ответе

SILA

07:49, 28th August, 2020

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться