我已经创建了一个Web服务,当我想使用它的方法时,我在一个过程中实例化它,调用该方法,最后我将其处置,但是我认为在"私有空间"中实例化Web服务也是可以的。 Main_Load(object sender,EventArgs e)"事件。
问题是,如果我以第一种方式进行操作,则每次需要使用其中一种方法时,都必须实例化该Web服务,但是以另一种方式,当我以某种形式使用Web服务时,则必须一直保持连接状态。
我想知道哪种做法更好,或者是否有更好的办法
策略1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 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一起进行应用程序演示时,发生的情况完全相同,我个人不喜欢这种行为,这就是为什么这个问题。
感谢您的回答。