Вопрос

Я создал и развернул службу WCF в SharePoint и отправляю запросы с помощью jQuery.Все работает нормально, за исключением вспомогательных сайтов.

Допустим, у меня есть эти два URL-адреса сервиса:

 - http://localhost:1111/_vti_bin...../MethodName
 - http://localhost:1111/subsite/_vti_bin...../MethodName  

Когда я использую эти два URL-адреса, SPContext.Current.Site это то же самое и является правильным.
Но тот SPContext.Current.Web это то же самое, что неверно.Используя второй URL-адрес, SPWeb объект должен быть вспомогательным веб-сайтом, а не корневым веб-сайтом.

Как я могу получить вспомогательный сайт в качестве SPWeb возражать?Нужно ли мне всегда передавать веб-URL в качестве параметра методу WCF?

Это было полезно?

Решение

После поиска я пришел к выводу, что SPContext.Current.Web всегда будет возвращать RootWeb итак, мне нужен URL-адрес конкретного подсети.

Чтобы избежать передачи URL-адреса SPWeb каждому методу WCF, где мне нужен объект SPWeb, я могу сделать следующее:

Я запускаю свою службу WCF в ASP.NET режиме совместимости, чтобы я мог использовать HttpContext возражайте, и я могу использовать HttpContext.Current.Request.RawUrl.Это свойство возвращает все, что находится в строке URL после имени домена.Затем я могу усечь эту строку, чтобы получить относительный URL-адрес вложенного веб-сайта, и передать его в OpenWeb() способ.

Пример:

На стороне клиента аргументом URL вызова jQuery AJAX является:

 http://localhost:1111/subsite/_vti_bin...../MethodName

На стороне сервера, если я использую HttpContext.Current.Request.RawUrl Я получаю:

/subsite/_vti_bin...../MethodName

Затем, после того как я усекаю эту строку, я передаю /subsite к тому OpenWeb() способ.

Любые другие идеи будут высоко оценены.

Другие советы

У меня был тот же случай.Но я взял URL отсюда:

Uri requestUri = System.ServiceModel.OperationContext.Current.RequestContext.RequestMessage.Headers.To;
.

Так что я смог создать объект SPSite:

using (SPSite site = new SPSite(requestUri.Scheme + "://" + requestUri.Host)
{ 
    //your code
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top