2009-07-30 2 views
1

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

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

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

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

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

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

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

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

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

Thanks.

+0

Являются ли ваши службы ASP.NET, вызывающие веб-службу SharePoint, сидящими на одних и тех же серверах (QA и PROD)? Если да, почему бы просто не назвать объектную модель услугами ASP.NET? – Janie

+0

Нет смысла называть веб-службу на одном ящике с другой службы ... – Janie

ответ

0

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

2

Шон,

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

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

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

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

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

0

Что касается обновления вашего вопроса о несанкционированной ошибке с помощью объектной модели:

В зависимости от контекста, что ваш код работает в вас иногда нужно поднять привилегии. См. Статью Elevation of Privilege MSDN для получения дополнительной информации (также обратите внимание на комментарий сообщества в конце). Также есть Visual How-To.

Другим методом является создание new SPSite object using a SPUserToken object. Существует дополнительная информация in this blog post by Daniel Larson. Для системы счета это будет сделано с кодом:

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

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

Смежные вопросы