_vti_bin Lists.asmx;如果首次登录尝试Web服务失败怎么办?

时间:2011-01-14 14:59:08

标签: c# web-services sharepoint

我在SharePoint场上访问了lists.asmx,我通常会访问该场以更新列表项。 Lists.asmx在白天完全验证我的客户端,但在夜间失败(由于系统维护)。我想确保我的客户端继续尝试连接到服务(比如说长达1小时)。你想在这里建议什么选择?我们这里是否有现成的东西,或者我必须在客户端编写我自己的代码?如果我必须在客户端编写自己的重试代码,那么该类的设计应该是什么样的?

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服务例程的调用次数,以避免无限循环。