Особенности Internet Facing Deployment (IFD)

Дамы и господа, вашему вниманию – 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.

Русский

Метки:

field_vote: 
5
Average: 5 (3 votes)

Комментарии

  1. Про http:// и скрипты чего-то вспоминается, думаю, лучшим решением будет использование глобальной переменной SERVER_URL. localhost в скриптах тоже зло, т.к. не будут работать XMLHTTPRequest-запросы (из-за ограничений безопасности Cross-site scripting).
  2. А в ISV директорию покидать сайты?
  3. Вызов CrmService из контекста в Child Pipeline (через CreateCrmService) не только при IFD недоступен: In a child pipeline, you must instantiate the CrmService or MetadataService manually.

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