我在SharePoint场上访问了lists.asmx,我通常会访问该场以更新列表项。 Lists.asmx在白天完全验证我的客户端,但在夜间失败(由于系统维护)。我想确保我的客户端继续尝试连接到服务(比如说长达1小时)。你想在这里建议什么选择?我们这里是否有现成的东西,或者我必须在客户端编写我自己的代码?如果我必须在客户端编写自己的重试代码,那么该类的设计应该是什么样的?
答案 0 :(得分:2)
开箱即用的解决方案是Web服务的Timeout值。我使用Try / Catch块处理服务器端的SharePoint Web服务错误,并在第二次尝试后以静默方式中止或向用户报告错误。例如,如果您有一个函数从您将使用的显示名称中获取List GUID(在VB中)。 。
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服务例程的调用次数,以避免无限循环。