Веб-службы SharePoint "Невозможно подключиться к удаленному серверу" - PullRequest
1 голос
/ 30 июля 2009

Я получаю сообщение об ошибке при попытке вызвать веб-сервисы SharePoint на одной из наших платформ. Для начала у нас есть серверы SharePoint для разработки (DEV), тестирования (QA) и производства (PROD). Серверы QA и PROD практически идентичны. У нас есть веб-сервис ASP.NET, который выступает в качестве отдельного приложения для каждого из них. Наши формы ввода данных обращаются к веб-службам для вставки / обновления в базу данных SQL, а в некоторых случаях обращаются к некоторым веб-службам SharePoints (lists, dws).

У нас возникают проблемы с вызовом веб-сервисов SharePoint по PROD из наших веб-сервисов, однако у нас нет проблем с QA (или DEV). В нашем коде веб-службы есть веб-ссылка на веб-службы SharePoint (списки и dws). Мы пытаемся вызвать эти веб-службы для создания элементов списка / папок, когда новая запись сделана через одну из наших форм. В QA нет проблем при создании списка элементов / папок. Форма заполнена, вызывает наши веб-сервисы - которые вызывают веб-сервисы SharePoint, и создается элемент / папка списка.

В PROD мы получаем следующую ошибку при попытке вызова веб-служб SharePoint:

Невозможно подключиться к удаленному серверу

в System.Net.HttpWebRequest.GetRequestStream () в System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke (String methodName, Object [] параметры) ...

Однако, чтобы было еще интереснее, если я вызываю веб-службы PROD SharePoint напрямую со своего персонального компьютера, у меня не возникает проблем при создании элементов списка / папок. Проблема возникает только тогда, когда наша веб-служба пытается вызвать веб-службы PROD SharePoint. Мы просмотрели много разных файлов web.config в поисках различий в QA и PROD и еще ничего не нашли.

Если у кого-нибудь есть указатели, они будут очень признательны. Спасибо.

Обновление: Я только что попытался провести рефакторинг вышеупомянутого метода для использования API объектной модели SharePoint, и я получаю несанкционированную ошибку. При использовании API объектной модели учетные данные, по-видимому, не передаются должным образом, поскольку он пытается использовать учетные данные сервера MOSS. Есть ли способ сказать ему, какие учетные данные использовать, как вы делаете с API веб-службы?

docLibList.Credentials = System.Net.CredentialCache.DefaultCredentials;

Спасибо.

Ответы [ 3 ]

2 голосов
/ 30 июля 2009

Шон,

Я не уверен, что полностью понимаю ваш шаблон вызовов, но если вы действительно возвращаетесь к веб-службам в одном окне, возможно, вы столкнулись с печально известной проблемой обратной петли:

https://serverfault.com/questions/32345/ie-8-authentication-denied-on-local-sharepoint-site/32485#32485

Короче говоря: выполнение HTTP-вызовов на основе имени хоста, которые могут быть заблокированы на сервере, с которого они были отправлены, могут быть заблокированы. Если проблема обратной петли находится в игре, вы сможете вызывать веб-сервисы в PROD из другого ящика ... но не из самого ящика PROD (то есть зацикливание назад). Я думаю, что это соответствует поведению, которое вы описали выше.

Если уровни исправлений Windows различаются в разных средах, это может объяснить причину сбоя кода в PROD, а не в других.

Надеюсь, это поможет!

0 голосов
/ 03 августа 2009

По поводу обновления вашего вопроса о несанкционированной ошибке с использованием объектной модели:

В зависимости от контекста, в котором работает ваш код, вам иногда потребуется повысить привилегии. Подробности смотрите в статье Повышение привилегий MSDN (также обратите внимание на комментарий сообщества в конце). Есть также Визуальный How-To .

Другой метод заключается в создании нового объекта SPSite с использованием объекта SPUserToken . В этом сообщении блога Дэниел Ларсон содержится дополнительная информация . Для системной учетной записи это будет сделано с кодом:

SPSite site = new SPSite(SPContext.Current.Site.ID,
                         SPContext.Current.Site.SystemAccount.UserToken); 

Кстати, в следующий раз это было бы лучше по своему собственному вопросу, чтобы за него можно было правильно проголосовать и ответить.

0 голосов
/ 30 июля 2009

Вероятно, это не проблема, но вы ссылаетесь на веб-сервис, указывающий на рабочий сервер правильно. Раньше у меня была проблема при попытке доступа к службе SP, на которую ссылались неправильно. Сервер разработки, на который я указывал, находился в отдельном домене и не мог быть найден.

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