我已经创建了一个web服务,当我想要使用它的方法时,我在一个过程中实例化它,调用该方法,最后我将它处理掉,但是我认为也可以在实例化中提供web服务。 “private void Main_Load(object sender,EventArgs e)”event。
问题是,如果我这样做,第一种方法是每次我需要其中一种方法时必须实例化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();
}
答案 0 :(得分:2)
这取决于您调用Web服务的频率。如果你几乎要经常调用它,那么使用方法#2可能会更好。但是,如果它不会经常被调用,那么最好使用方法#1,并且只在需要时实例化它。
答案 1 :(得分:0)
现在我为一个移动设备制作了一个解决方案,它转而在不规则的时间使用,它可以在10分钟,1小时,4小时内使用它变化很大,似乎更好的方法是第一个策略
去年我们开展了一个使用webservices的项目,事实是我们在Sub New()程序中实例化了我们的web服务并运行得很好,但是,有时一些用户声称我们从他们那里醒来他们的椅子,当他们返回并尝试继续申请时,他们收到了超时错误消息,他们不得不重新登录。
我们认为这可能是好的,因为可能是用户长时间离开了他们的座位,但一旦在与CEO的应用程序的演示中它发生了完全相同的情况,我个人不喜欢这种行为就是问题的原因。
感谢您的回答。