2008-08-16 75 views
2

我創建了一個web服務,當我想使用它的方法時,我在一個過程中實例化它,調用該方法,最後我將其部署,但是我認爲它也可以實例化「private void Main_Load(object sender,EventArgs e)」事件中的webservice。webservices的最佳做法

事情是,如果我這樣做,第一種方式,我必須實例化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(); 
} 

回答

2

這取決於你打電話給Web服務的頻率。如果你打算幾乎不斷地調用它,那麼使用方法#2可能會更好。但是,如果它不會經常被調用,那麼最好使用方法#1,並且只在需要時進行實例化。

0

現在我爲移動設備制定了一個解決方案,它變成在不規則的時間使用,它可以在10分鐘,1小時,4小時內使用它的變量,似乎更好的方法是第一個戰略。

去年我們開始使用webservices的一個項目,事實是我們在Sub New()過程中實例化了我們的webservices,並且它運行得非常好,但是,有時一些用戶聲稱他們醒了從他們的椅子上,當他們返回並試圖繼續申請時,他們收到了超時錯誤信息,他們不得不重新登錄。

我們認爲這可能是好的,因爲用戶可能會在很長的時間外出席他們的座位,但是一旦與首席執行官一起呈現應用程序,它就會發生完全相同的情況,並且我個人沒有像那樣的行爲,這就是問題的原因。

感謝您的回答。