【问题标题】:Best practice for webservicesWeb 服务的最佳实践
【发布时间】:2008-08-16 14:58:30
【问题描述】:

我创建了一个 web 服务,当我想使用它的方法时,我在一个过程中实例化它,调用该方法,最后我将它处理掉,但是我认为在"private void 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-services


    【解决方案1】:

    这取决于您调用网络服务的频率。如果您要几乎不断地调用它,那么使用方法#2 可能会更好。但是,如果它不会被如此频繁地调用,则最好使用方法 #1,并且仅在需要时实例化它。

    【讨论】:

      【解决方案2】:

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

      去年我们进行了一个使用 web 服务的项目,事实是我们在 Sub New() 过程中实例化了我们的 web 服务并且它运行得非常好,然而,有时一些用户声称他们从他们的椅子,当他们返回并尝试继续使用应用程序时,他们收到了超时错误消息,他们不得不重新登录。

      我们认为这可能没问题,因为用户可能会离开座位很长时间,但是在与 CEO 一起演示应用程序时,它发生了完全相同的场景,我个人不喜欢这种行为,这就是问题所在。

      感谢您的回答。

      【讨论】:

        猜你喜欢
        • 2015-07-26
        • 1970-01-01
        • 2014-07-07
        • 2011-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        相关资源
        最近更新 更多