2011-01-14 57 views
0

我有權訪問SharePoint場上的lists.asmx,我通常會訪問它來更新列表項。 Lists.asmx在白天完全驗證我的客戶端,但在夜間失敗(由於系統維護)。我想確保我的客戶端不斷嘗試連接到服務(例如長達1小時)。你想在這裏建議什麼選擇?我們在這裏有什麼東西可用,或者我將不得不在客戶端編寫自己的代碼?如果我必須在客戶端編寫自己的重試代碼,該類的設計應該是什麼樣子?_vti_bin Lists.asmx;如果第一次登錄Web服務失敗會怎麼樣?

回答

2

開箱即用的解決方案是webservice的​​值。我使用Try/Catch塊在服務器端處理SharePoint webservice錯誤,並在第二次嘗試後以靜默方式中止或向用戶報告錯誤。例如,如果你有一個函數來從你使用的顯示名稱(在VB中)獲取List GUID。 。 。

Dim ws As New SPLists.Lists() 
    Try 
     ws.Credentials = GetCredentials() 
     ws.Timeout = 60000 '1 minute timout 
     doc = XDocument.Parse(ws.GetListCollection().OuterXml) 
     SPGetListID = (From x In doc.Elements.First.Elements _ 
         Where x.Attribute("Title").Value.Equals(ListName) _ 
         Select x.Attribute("ID").Value).FirstOrDefault 
    Catch timeout As TimeoutException 
     ws.Abort() 
    Catch other As Exception 
     ws.Abort() 'or use a timing loop to call this function again 
    End Try 

。 。 。請求超時取消請求。如果webservice在你的情況下返回另一個錯誤,它可以在Catch Other部分中處理。

我不會將ws.Timeout值設置爲3600000,因爲Web服務器很可能會設置爲在小時運行之前強制超時。相反,您可以在Catch塊(或調用此函數的代碼中)中使用定時循環,並以設定的時間間隔再次進行web服務調用。在那個代碼中,你會想要限制對web服務例程的調用次數,以避免無限循環。

+0

Web服務最有可能拋出錯誤。我會建議當檢測到錯誤時循環(我同意Toadmyster,絕對需要最大數量的重試)。 – 2011-01-14 20:14:39

相關問題