#objective-c #web-services #sharepoint #http #soap
#objective-c #веб-службы #sharepoint #http #soap
Вопрос:
Я пытаюсь программно загрузить файл в SharePoint через приложение Mac, которое я сейчас пишу. Я могу использовать веб-сервис GetListItems для получения списка файлов, и вся аутентификация и т. Д. Работает Правильно. Я сам формирую SOAP-сообщение следующим образом:
Сначала я подумал, что у меня просто неправильно написана сторона Objective C, но я использую расширение HTTP-запроса для Firefox «Poster» и до сих пор не могу заставить его работать.
Сообщение soap в Poster, которое я создаю, является:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<CopyIntoItems xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<SourceUrl>http://null</SourceUrl>
<DestinationUrls>
<string>myurl.com/Shared Documents/Documents/TestingFile.txt</string>
</DestinationUrls>
<Stream>VGVzdGluZyB0ZXN0aW5n</Stream>
</CopyIntoItems>
</soap:Body>
</soap:Envelope>
Поток (на данный момент) — это всего лишь некоторые данные, чтобы посмотреть, смогу ли я заставить его работать. Я прочитал, что настройка sourceURL как http://null , может помочь в некоторых случаях. Я также читал, что DestinationURL должен быть полным путем. Проблема здесь заключается в:
1) Если я добавлю URL-адрес без https: //, я получу ответ:
<?xml version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CopyIntoItemsResponse
xmlns="http://schemas.microsoft.com/sharepoint/soap/">
<CopyIntoItemsResult>0</CopyIntoItemsResult><Results><CopyResult ErrorCode="Success"
DestinationUrl="myurl.com/Shared Documents/Documents/TestingFile.txt" /></Results>
</CopyIntoItemsResponse></soap:Body></soap:Envelope>
2) Если я укажу полный путь, например
https://myurl.com/Shared Documents/Documents/TestingFile.txt
тогда результат говорит мне то же самое, что и раньше, за исключением этого бита:
<CopyResult ErrorCode="Unknown" ErrorMessage="Object reference not set to an instance of an
object."
DestinationUrl="https://dbp.btfinancialgroup.com/Shared Documents/Papers/TestingFile.txt"
/>
3) Если я укажу полный путь в кавычках, например
«https://myurl.com/Shared Documents/Documents/TestingFile.txt »
затем результаты говорят мне то же, что и в первом, например, что он прошел успешно, но с destinationURL этого:
DestinationUrl="amp;quot;https://dbp.btfinancialgroup.com/Shared
Documents/Papers/TestingFile.txtamp;quot;"
Во всех этих сценариях файл не существует в месте назначения в конце запроса.
Я действительно застрял, так как большинство онлайн-предложений предназначены для устранения проблем с C #, которые используют протоколы .net для подключения к SharePoint.
Есть предложения?
Спасибо
Ответ №1:
Чтобы помочь всем, кто может столкнуться с этой проблемой.
Оказалось, что это вообще не проблема с моим кодом, которую я установил, создав проект на C #, чтобы попытаться использовать лучшее подключение, которое он предоставляет SharePoint, а также поговорил с кем-то в службе поддержки Microsoft, который подтвердил, что мой код должен работать.
В конце концов, это были неправильные сопоставления на сервере, что означало, что веб-служба никогда не связывалась правильно с URL-адресами. Это вызвало ошибку «Ссылка на объект не установлена для экземпляра объекта».
Для всех, кто получает это сообщение об ошибке, это может быть связано не только со значениями, которые вы передаете веб-службе — также проверьте сопоставления, настроенные на сервере. По-видимому, журналы ULS могут помочь в этом, отметил сотрудник службы поддержки Microsoft, с точки зрения сужения того, что его вызывает.
Комментарии:
1. Можете ли вы поделиться исходным кодом obj-c о том, как загрузить файл из iOS в SharePoint? Спасибо!