Дамы и господа, вашему вниманию – Internet Facing Deployment (IFD). По сути – это публикация CRM в интернет, для пользования извне.
С этой темой я столкнулся на проекте внедрения в одной небольшой российской компании. И открыл для себя много интересного :)
Почему нужен был IFD - чтобы предоставить доступ к системе как локальным, так и внешним пользователям, которые не имеют доступа в локальную сеть компании. То есть, вообще говоря, это не просто IFD, а IFD + On-Premise.
Помимо стандартного документа по развёртыванию IFD от MS (http://www.microsoft.com/downloads/details.aspx?FamilyID=3861e56d-b5ed-4f7f-b2fd-5a53bc71dafc&displaylang=en ), есть несколько фактов, касающихся кастомных доработок.
Итак.
1. Java-скрипты
Если коротко – «http://» зло :)
Не следует писать в скриптах ссылки на страницы\веб-сервисы в виде
“http://” + window.location.host + “…”
Так как IFD работает через https, они не будут открываться. По возможности, всегда используйте относительные ссылки (из ссылки выше – просто “…”). В крайнем случае, можно пользоваться location.protocol либо SERVER_URL (Последняя, правда, не будет работать по localhost. А при IFD открыть CRM со своего же сервера можно только по localhost. Впрочем, с других машин сети, будет работать по локальному адресу).
Совет: Это правило справедливо для любого проекта, даже где IFD нет.
Примечание: IFD, вообще говоря, можно развернуть и через http. Вот это уже засада, вариантов обхода пока не придумал :)
2. Кастомные сайты, веб-приложения.
Поскольку IFD публикует только узел самого CRM, все остальные узлы сервера не будут доступны в интернете. Поэтому, нужно для каждого сайта\приложения создать виртуальную директорию в узле CRM (как бы страшно это не звучало). Или, маловероятный вариант – уговорить ответственных лиц опубликовать и дополнительные узлы в интернет. Соответственно, придётся переделать все ссылки на эти сайты, где они есть.
3. Плагины. Особенность Child Pipeline
> System.Net.WebException: Сбой запроса с состоянием HTTP 401: Unauthorized
> Authentication type 0 is not allowed.
> Crm Exception: Message: The ticket specified for authentication is invalid, ErrorCode: -2147180286
Все эти ошибки из-за того, что как известно, в child pipeline (пример – Create Встречи) нельзя вызвать веб-сервис Crm из контекста и принято создавать его в коде принудительно. Обыкновенно учитывается только случай AD-авторизации. При IFD авторизация другая. И не достаточно просто указать её тип. Соединение с сервисом происходит по-другому (об этом есть в SDK).
Наиболее простой вариант обхода проблемы (системно-административный): на самом деле, если на сервере выключить редирект на IFD-версию ресурса (грубо говоря, чтобы сам на себя сервер заходил локально, а не через интернет), то плагины должны получить доступ к сервису по локальным адресам и через AD.
Комментарии
Vladislav Osmanov
15.03.2010 15:10
Permalink
Платон, спасибо за статью!
Добавить комментарий