2011-01-14 19 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

相关问题