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一起演示应用程序时,情况就完全一样,而且我个人不喜欢这种行为,这就是为什么这个问题。
感谢回答。