Web服务的最佳做法

时间:2020-03-05 18:40:04  来源:igfitidea点击:

我已经创建了一个Web服务,当我想使用它的方法时,我在一个过程中实例化它,调用该方法,最后我将其处置,但是我认为在"私有空间"中实例化Web服务也是可以的Main_Load(object sender,EventArgs e)"事件。

问题是,如果我以第一种方式进行操作,则每次需要使用一种方法时都必须实例化该Web服务,但是以另一种方式,当我以某种形式使用Web服务时,则必须一直保持连接状态。

我想知道以下哪种做法更好,或者是否有更好的办法

策略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();
}

解决方案

回答

这取决于我们要多久调用一次Web服务。如果我们几乎要不断调用它,那么使用方法2可能会更好。但是,如果不会经常调用它,那么最好使用方法1,并且仅在需要时才实例化它。

回答

现在,我为移动设备提出了一个解决方案,它可以在不规则的时间使用,可以在10分钟,1小时,4个小时内使用,因为它的变化很大,似乎更好的方法是第一个策略。

去年,我们进行了一个使用Web服务的项目,事实是我们在Sub New()过程中实例化了Web服务,并且运行得很好,但是,有时有些用户向我们宣称他们从椅子上醒来了,当他们返回并尝试继续使用该应用程序时,他们收到超时错误消息,因此必须再次重新登录。

我们认为这也许还可以,因为也许用户长时间不在座位上出去了,但是一旦与CEO一起演示应用程序时,情况就完全一样,而且我个人不喜欢这种行为,这就是为什么这个问题。

感谢回答。