2009-02-04 4 views
4

У меня возникла проблема с доступом к SharePoint Webservice через Silverlight.Доступ к веб-службам SharePoint через Silverlight

Произошла ошибка при попытке сделать запрос к URI 'http://sample:8000/_vti_bin/Authentication.asmx. Это может быть связано с попыткой сделать доступ к службе в междоменном способе без надлежащей политики междоменного домена на месте или в политике , непригодной для SOAP-сервисов. Вы можете связаться с владельцем службы , чтобы опубликовать файл политики кросс-домена и обеспечить его возможность отправлять HTTP-заголовки, связанные с SOAP. Подробнее см. Внутреннее исключение для .

Некоторые вопросы:

  1. Как правильно развернуть clientaccesspolicy.xml над Sharepoint Designer? Просто откройте сайт в дизайнере, добавьте файл, а затем опубликуйте?
  2. Сайт, где clientaccesspolicy.xml должен быть развернут, использует проверку подлинности форм. Я не смог использовать Sharepoint Designer для публикации там. Из-за этого я создал новую зону для этого сайта, которая использует аутентификацию Windows и опубликовал clientaccesspolicy.xml. Оба используют одну и ту же базу данных контента, не так ли?
  3. Если clientaccesspolicy.xml будет опубликован, как разрешить доступ к этому файлу анонимно?

С уважением Антон Kalcik

+0

я не смог получить доступ к файлу анонимно. Что я сделал, так это то, что я создал «службу WCF с поддержкой Silverlight», которая выступает в качестве прокси-сервера между приложением Silverlight и веб-службами SharePoint. –

ответ

1

Здесь отвечает на мой вопрос 1. и 2 .:

  1. В Sharepoint Designer вы открыть сайт через: File -> Open Site -> В текстовом поле «Имя сайта:» введите URL вашего сайта. Than drag & drop clientaccesspolicy.xml в корневом каталоге вашего сайта.
  2. Если у вас есть аутентификация по форме, вам не нужно, чтобы этот шаг создавал новую зону (но по некоторым причинам это может быть полезно). Вы просто открываете веб-браузер и набираете URL своего сайта. Затем заполните текстовые поля (всегда с пользователем, имеющим права администратора) и установите флажок «Ввести меня автоматически». После этого разработчик Sharepoint будет использовать эти учетные данные для указанного URL.

Если вы можете мне помочь с вопросом Nr. 3, или у вас есть другое решение, как я могу получить доступ к clientaccesspolicy.xml из Silverlight, опубликуйте его!

+0

скорее использовать функцию комментария (я думаю, что она доступна только на определенном уровне) или использовать функцию редактирования, чтобы обновить сообщение. не отправляйте ответы на свой вопрос, если это не ответ. –

+0

Точка 1. и 2. являются ответами на мои вопросы. –

0
  1. Это прекрасно.
  2. Это должно быть, если вы не настроили совершенно новый сайт.
  3. Не должно быть такого риска безопасности. Если вам нужна аутентификация через WindowsAuth для служб, так что вы должны использовать для clientaccesspolicy.xml.
+0

Зачем разрешать доступ к клиенту clienteccesspolicy.xml или crossdomain.xml анонимно - это риск для безопасности? Amazon делает это также: http://www.amazon.com/crossdomain.xml. Можете ли вы предоставить мне пример, как я могу пройти проверку подлинности до того, как этот файл будет доступен во время выполнения Silverlight? –

+0

Часть 1: Это риск для безопасности, поскольку вы удаляете защиту для части сайта. Если кто-то может заменить этот файл, он может нанести всевозможные повреждения. –

+0

Часть 2: Amazon полностью анонимный доступ в представлении веб-сервера - они используют пользовательскую аутентификацию для своего сайта и служб. MOSS - это аутентификация Windows для веб-сервера и аутентификация сайта и служб. Две очень разные настройки и, следовательно, проблемы безопасности различны. –

0

Имейте в виду, что clientaccesspolicy.xml должен быть у домена домена. В вашем примере он должен был бы получить от http://sample:8000/clientaccesspolicy.xml. Если вы не можете открыть его из своего браузера по этому URL-адресу, ваш клиент Silverlight также не найдет его.

Самый простой способ получить файл в нужном месте - просто скопировать его через FTP или проводник. Файл должен быть доступен анонимным пользователям (только для чтения).

+0

Я знаю, что этот файл должен находиться в корне домена. Это не проблема. Моя проблема заключается в том, что вы должны пройти аутентификацию, если хотите получить доступ к этому файлу. Я не думаю, что вы можете просто использовать Copy & Paste в SharePoint. Обычно мне нужен SharePoint Designer, потому что весь контент в SharePoint хранится в БД. –

+0

Я обычно уклоняюсь от дизайнера SP, поэтому я не могу вам помочь, но, безусловно, можно просто скопировать файл в корень сайта SP. Это всего лишь папка на сервере (обычно c: \ inetpub \ wwwroot \ wss \ VirtualDirectories \ 80), и я сделал это несколько раз сам. Вы ограничились использованием SP Designer по какой-то причине? – 2009-07-24 18:07:48

+0

Эй, Джефф, нет. Я не ограничусь использованием SharePoint Designer. Я уже пробовал вам предложение без успеха. Посмотрите http://rialight.net/2008/03/18/calling-sharepoint-web-service-from-silverlight-2/.Этот парень также предлагает использовать SharePoint Designer. –

1

То, как мы справлялись с этим в нашем проекте, было использование обработчика HTTP. Мы помещаем файл clientaccesspolicy.xml в каталог _layouts (который совместно используется на сайтах sharepoint) с использованием функции (вы также можете просто вручную скопировать его там).

Затем мы добавили наш обработчик HTTP в раздел обработчиков web.config. В нашем обработчике мы проверяем, если запрос на /clientaccesspolicy.xml и если да перепишем путь:

if (path.ToLowerInvariant() == "/clientaccesspolicy.xml") 
{ 
    HttpContext.Current.RewritePath("/_layouts/clientaccesspolicy.xml"); 
} 

я не уверен, если это будет обходить безопасность, поэтому он не может полностью решить проблему , Но по крайней мере это дает вам способ доступа к этому файлу.

+0

Очень интересная идея! Именно сегодня я благодарю за использование каталога _layouts: -) ... –

+0

Кто-нибудь протестировал этот ответ? –

0

я нахожу более realeable способ реализации Sharepoint HttpHandler: он возвращает все содержимое clientaccesspolicy.xml себя

 public void ProcessRequest(HttpContext context) { 
     if (context.Request.Path.ToLowerInvariant() == "/clientaccesspolicy.xml")   { 
      context.Response.Write(@"<?xml version='1.0' encoding='utf-8' ?><access-policy><cross-domain-access> "+ 
      @"<policy> <allow-from http-request-headers='*'> <domain uri='*' /> </allow-from> <grant-to> "+ 
      @"<resource path='/' include-subpaths='true' /> </grant-to> </policy> "+ 
      @"</cross-domain-access> </access-policy>"); 
     } 
    } 
Смежные вопросы