Домашняя страничка Стефурак П.Б. Создание приложения обработки сообщений для Lync Server 2013 на c#.
 
     Домашняя Промзона Спальный район  

Промзона \ Создание приложения обработки сообщений для Lync Server 2013 на c#
Создание решения для Lync Server 2013 позволяющее обрабатывать проходящие через Lync Server сообщения.

  В этой статье я постараюсь рассказать, как создать решение, работающее совместно с Lync Server 2013, которое позволяет обрабатывать проходящие через Lync Server сообщения.
  Microsoft Lync Server 2013 предназначен для организации обмена мгновенными сообщениями, сведения о присутствии, конференц-связи и телефонии на уровне предприятия. В качестве клиента для него выступает Microsoft Office Communicator / Microsoft Lync / «Skype для бизнеса» - в его работу вмешиваться не будем, он остается стандартным.
  Для создания приложения нам понадобится:
  • Развернутый Lync Server 2013 (и все что нужно для его развертывания – Windows Server, MS SQL Server и т.д.);
  • Skype для бизнеса (как минимум 2 шт, чтобы диалог организовать);
  • Lync Server 2013 SDK;
  • Visual Studio 2012-2019;
      В тестовой среде не обязательно все должно быть установлено на одном ПК, но будет удобнее, если VS будет стоять там же, где и Lync Server 2013 и его SDK.
      Расширение для Lync Server, состоит как минимум из манифеста (Application Manifest) и, опционально, приложения:
  • манифест – описание расширения на языке MSPL (Microsoft SIP Processing Language), обеспечивает интеграцию решения с Lync Server и, при необходимости, регистрирует в Lync Server события, которые необходимо передать приложению на обработку;
  • приложение, реализующее обработчики событий, описанных в манифесте. Приложение может быть реализовано как консольное, Windows Forms, служба Windows. Мне кажется, для production ready решения больше подходит служба Windows.
      Концепция MSPL, предполагает, что большинство простых действий по обработке сообщений может быть описано непосредственно в манифесте и приложение может понадобится только для нестандартной и расширенной обработки сообщений.
      Практически манифест выглядит следующим образом (Manifest.am):
     

    , где:
      appUri – описывает Uri приложения, вида “домен организации / имя решения” и может быть произвольным, но уникальным в рамках фермы Lync;
      requestFilter – определяет параметры, для которых будет срабатывать наше решение;
      splScript – собственно программный код MSPL, в нашем случае регистрирующий 2 обработчика сообщения: если пришел запрос, то он отправляется на обработку в обработчик OnRequest, иначе, считаем, что пришел ответ и отправляем его на обработку в OnResponse (Lync Server оперирует диалогом, а не просто сообщениями).
      Манифест нужно зарегистрировать в Lync Server, делается это через группу команд *-CsServerApplication Power Shell (запуск обязательно с правами локального администратора на сервере):
      Регистрация: New-CsServerApplication -Identity Service:Registrar:”полное имя сервера Lync / имя решения” -Uri “Uri приложения, вида домен организации / имя решения” -Enabled $true -Critical $false
      Изменение: Set-CsServerApplication -Identity Service:Registrar:”полное имя сервера Lync / имя решения” -Uri “Uri приложения, вида домен организации / имя решения” -Enabled $true -Critical $false
      Просмотр: Get-CsServerApplication
      Более подробно смотрите соответствующую документацию на Lync Server.
      И так, первая часть решения, манифест, у нас есть, дело за приложением (Test), которое будет принимать на обработку от Lync Server сообщения по событиям OnRequest /OnResponse.
      В VS начинаем новый проект, Служба Windows (.NET Framework) (Проект для создания служб Windows).
     

    Первым делом включим в ссылки сборку .NET SIP Server Application Interface, реализованную в C:\Program Files\Microsoft Lync Server 2013\SDK\Bin\ServerAgent.dll – библиотека появится по этому пути после установки Lync Server 2013 SDK.
     

      Program.cs менять не будем, в принципе нас все в нем пока устраивает.
      В собственно реализации сервиса, файле “TestService.cs”, в классе, наследованном от ServiceBase, описывается 2 события:
        Событие OnStart – при старте сервиса, создается экземпляр класса TestWork и запускается в новом потоке. Это необходимо, чтобы быстро отдать управление менеджеру служб Windows – смотрите соответствующую документацию по разработке служб Windows;
        Событие OnStop – остановка сервиса.
     

      Опционально сервис может еще поддерживать OnPause / OnResume и т.д.
      Создадим модуль полезной нагрузки сервиса (Work.cs).
      В классе TestWork нам как минимум нужно описать обработчики Start / Stop, реализующие реакцию на запуск и остановку сервиса:
     

      При запуске сервиса, подключаемся через ServerAgent к Lync Server, загружаем манифест решения, регистрируем приложение согласно нашего манифеста и запускаем главный поток обработки сообщений от Lync Server (переменная ServiceRun будет служить флагом работы сервиса – true работает, false – остановлен):
     

      Поток крутится в цикле пока сервис запущен, ожидая от Lync Server событий и, на каждое событие, запускает поток обработчика, реализующего события OnRequest /OnResponse:
     

      При наступлении события OnRequest /OnResponse Lync Server передаст нам в RequestReceivedEventArgs/ResponseReceivedEventArgs всю необходимую информацию о сообщении, включая его текст в .Content. После работы с сообщением, возвращаем его Lync Server для дальнейшей обработки и доставки.
      Текст передается в формате RTF, поэтому работать с ним можно, например, так:
     

      После успешной компиляции решения, расположите Manifest.am рядом с исполняемым файлом сервиса, создайте новую службу Windows и запустите её.
     
      Исходные тексты примера   
     
  •