_vti_bin Lists.asmx;Что делать, если попытка входа в веб-службу не удалась в первый раз? - PullRequest
0 голосов
/ 14 января 2011

У меня есть доступ к lists.asmx на ферме SharePoint, к которому я обычно обращаюсь для обновления элементов списка. Lists.asmx прекрасно аутентифицирует моего клиента в дневное время, но не работает в ночное время (из-за обслуживания системы). Я хочу убедиться, что мой клиент продолжает пытаться подключиться к услуге (скажем, до 1 часа). какие варианты вы хотели бы предложить здесь? Есть ли у нас что-то доступное прямо из коробки, или мне придется написать свой собственный код на стороне клиента? Как должен выглядеть дизайн класса, если мне придется написать собственный код повторов на стороне клиента?

1 Ответ

2 голосов
/ 14 января 2011

Готовым решением является значение Timeout веб-службы.Я обрабатываю ошибки веб-службы SharePoint на стороне сервера с помощью блока Try / Catch и либо молча прерываю работу, либо сообщаю пользователю об ошибке после второй попытки.Например, если бы у вас была функция для получения 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

.,,где тайм-аут запроса отменяет запрос.Если в вашем случае веб-служба возвращает еще одну ошибку, ее можно устранить в разделе «Поймать другое».

Я бы не стал устанавливать значение ws.Timeout равным 3600000, потому что на веб-сервере, скорее всего, будет установлен таймаут до истечения часа.Вместо этого вы можете использовать цикл синхронизации в блоке Catch (или в коде, который вызывает эту функцию) и снова вызывать веб-сервис через заданные интервалы.В этом коде вы хотели бы ограничить количество обращений к подпрограмме веб-службы, чтобы избежать бесконечного цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...