Доступ к локальным ресурсам клиента Sharepoint

Иногда возникает потребность получить доступ из кода к ресурсам, расположенным на компьютере клиента WSS/Sharepoint. У меня такая необходимость возникла в связи с тем, что необходимо было подписать вложение в списке Sharepoint, а как известно, сертификат для подписи должен содежать в себе закрытый ключ, который по соображениям безопасности нельзя передавать по сети.
Также известно, что все браузеры блокируют доступ к локальным ресурсам, по тем же соображениям безопасности.
Т.к. я всё-же больше админ, нежели программист, такие понятия как ActiveX в браузере и иже с ними для меня просто пугающие. Но задачу выполнять надо.
 
Решения я подсмотрел (как не странно ;) ) у Microsoft. По работе мне часто приходить иметь дело с Microsoft SQL Server 2005 (название полное, большой привет dg ;) ). Одним их сервисов этого пакета является Repoting Services. Он позволяет публиковать отчеты и получать к ним доступ по средствам HTTP/HTTPS. Так вот в этом сервисе встроен редактор отчетов, который запускается прямо из браузра и написан, судя по внешнему виду и скорости его работы, явно на .NET.
 
Как такое реализовать пришлось искать не долго — технология ClickOnce от Microsoft нам в помошь. Данная технология позволяет публиковтаь приложения, обновлять их и отслеживать версионность. Причем на ряду с обычной публикацией на сетевой или локальный диск, присутствует возможность публиковать приложение на web-сайты (локалььный IIS или удаленный сервер через FrontPage Server Extensions) и FTP-разделы. Опыт использования ClickOnce для "обычного" распространения у меня был, поэтому долго учиться не пришлось.
 
Я создал приложение для подписывания PDF-файлов в Microsoft Visual Studio 2008, и тогда встал ряд вопросов:
 — куда и как его опубликовать.
 — как передать параметры этому приложению.
 
После решения этих проблем я был очень порадован легкостью, с которой они решились, что случается не часто при работе с Sharepoint.
Опубликование прошло просто "на ура". Shrepoint полностью поддерживает функции по передачи файлов FrontPage Server Extensions, поэтому Visual Studio 2008 легко может использовать ClockOnce совместно с WSS/Sharepoint. Достаточно в свойствах проекта на вкладке "Publish" указать адрес узла WSS/Sharepoint и директорию для приложения.
Единственный минус — в "Центре Администрирования" WSS/Sharepoint необходимо изменить параметры заблокированных файлов (Операции — Заблокированные типы файлов, _admin/BlockedFileType.aspx) — убрать из списка EXE-файлы. Это конечно серьезный удар по безопасности, но за удобство всегда приходится чем-то платить. Также необходимо удостовериться, что у вас есть права на операции через FrontPage и имя папки уже не занято.
Второй вопрос — как передавать параметры нашему приложению. Оказалось, что Microsoft позаботился и об этом. При вызове приложения, опубликованного через ClickOnce, ему можно передававать параметры обычным веб-запросом. Единственное, что нужно сделать, в Visual Studio 2008 в свойствах проекта на вкладке Publish зайти в опции (кнопка Options) и на появившейся форме отметить "галочку" "Allow URL parametrs to be passed to application".
После опубликования доступ к приложению производиться с помощью браузера и обычного HTTP-запроса, н-р так:
Чтобы получить доступ к этим параметрам из кода, в примерах MSDN (How to: Retrieve Query String Information in a ClickOnce Application) приводится вот такая функция:
 
        private NameValueCollection GetQueryStringParameters()
        {
            NameValueCollection nameValueTable = new NameValueCollection();
            /*
             * Проверяем, что приложение распространено через ClickOnce
             * Не смотря на название свойства, оно означается, что приложение запущено 
             * через любой из методов распространения ClickOnce
             */
            if (ApplicationDeployment.IsNetworkDeployed)
            {
                //Собственно самая интересная часть всей функции. Подробность в MSDN.
                string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
                //Используется стандартная функция по работе с HTTP, 
                //которая за одним позволяет избежать атак подстановкой запросов
                nameValueTable = System.Web.HttpUtility.ParseQueryString(queryString);
            }
            else
            {
                //Тут можно н-р анализировать параметры, которые были переданы приложению обычным путем
            }
 
            return (nameValueTable);
        }
 
 
Если выполнить приложение по ссылке выше, то данная функция вернем переменную с парами значений:
КЛЮЧ          ЗНАЧЕНИЕ
param1        4
param2        null
param3        1,2
 
Такое приложение легко встроить в WSS\Sharepoint по средствам CustomActions (см. WSS SDK). Вот пример CustomAction-а, который в меню редактирования элемента добавляет новый пункт и при его нажатии вызывает приложение, опубликованное через ClickOnce:
<CustomAction
  Id="AccointItem.DigitalSign"
  ShowInLists="TRUE"
  RegistrationType="ContentType"
  RegistrationId="0x0100e22559554ae6489abe6c615bc9a0e3cb"
  Description="Подписать счет цифровой подписью"
  Title="Подписать"
  Sequence="20"
  ImageUrl="/_layouts/images/CRT16.GIF"
  Location="EditControlBlock"
  Rights="EditListItems"
    >
  <UrlAction Url="http://wssserver/AccountPDFSign/AccountPDFSign.application?ServerName={SiteUrl}&amp;listItemIDs={ItemId}&amp;listGUID={ListId}"/>
</CustomAction>
 
Хотелось бы отметить, что опубликовывая приложение через WSS/Sharepoint мы получаем много преимуществ:
 — его резервная копия содается вместе с резервными копиями самого WSS/Sharepoint
 — приложение подчиняется тем же правилам и ведет себя также, как и любое другое содержимое WSS/Sharpeoint 
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: