Публикация пользовательского сообщения о присутствии в OCS2007 R2 с использованием UCMA 2.0 (отображается в MOC)

Я пишу приложение UCMA 2.0, которое соединяется с UserEndpoint с OCS. Я хочу иметь возможность установить собственное сообщение о присутствии вместе с моей доступностью!

Я столкнулся с некоторыми проблемами на этом пути и потратил много времени на поиск в Google и пробовал несколько статей, большинство, кажется, говорят то же самое (включая самих MS):

Используйте XML, чтобы установить действие userState как пользовательское и содержать сообщение, а затем опубликовать его в пользовательской категории с помощью метода конечной точки LocalOwnerPresence.BeginPublishPresence.

Когда я делаю это, я не получаю никаких ошибок от OCS (см. Пример XML ниже), но, глядя на присутствие в Office Communicator (MOC), рассматриваемый пользователь продолжает появляться в автономном режиме. Я обнаружил, что публикация "machineState" означает, что мы видим какой-то значок присутствия в MOC, но, увы, я не могу заставить работать сообщение с пользовательской активностью.

Больше чтения отправило меня на дикие гусиные преследования, такие как хранимые процессы в БД OCS, которые необходимо запустить, чтобы позволить это (звучало больше как добавление совершенно новых категорий присутствия, а не просто пользовательское сообщение в существующее состояние). Я нахожусь в конце моей привязи после дня "онлайн".

Любая помощь или указание на любые ошибки будут оценены! Я включил несколько сайтов, которые я использовал, когда читал об этом:

Присутствие Введение: http://msdn.microsoft.com/en-us/library/dd253506(v=office.13).aspx

Публикация Присутствия: http://msdn.microsoft.com/en-us/library/dd253494(v=office.13).aspx

Присутствие + Пользовательские сообщения: http://blogs.claritycon.com/blog/2009/03/04/how-to-publish-presence-using-ucma-v2-0-and-have-a-clever-communicator-status/

Идеи состояния машины: http://social.msdn.microsoft.com/Forums/en-US/ucmanagedsdk/thread/d3bd3569-66c0-4b52-86f0-900d2fb6d22e/

Документ Схемы присутствия: http://msdn.microsoft.com/en-us/library/dd941536(v=office.13).aspx

Вот XML (строка), которую я использую в своем коде, строка "на лету". Отформатируйте заполнители с помощью специального сообщения и целочисленного значения доступности ("тестовое сообщение" и 3500 для аргумента).

string userStateXmlFormat = "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" manual=\"true\" xsi:type=\"userState\">\n"
            + "<availability>{0}</availability>\n"
                + "<activity>\n" 
                   + "<custom xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n" 
                + "</activity>\n"
            + "</state>";

Вот C#, который выполняет форматирование и пытается опубликовать присутствие:

var machineStateXml = string.Format(machineStateXmlFormat, 3500);
var userStateXml = string.Format(userStateXmlFormat, 3500, "Test Message");
var machineState = new CustomPresenceCategory("state", machineStateXml);
var userState = new CustomPresenceCategory("state", userStateXml);                
PresenceCategory[] categoriesToPublish = new PresenceCategory[] { machineState, userState };
this.Endpoint.LocalOwnerPresence.BeginPublishPresence(categoriesToPublish, this.PublishPresenceCompleted, null);

Надеюсь, я ничего не пропустил, пожалуйста, прокомментируйте, если вы думаете, что чего-то не хватает!

Ура Пит

1 ответ

Решение

Хорошо, это немного неловко, так как мне удалось решить это, но я думаю, что могу обвинить MS:

Похоже, что вы ДОЛЖНЫ указать LCID (идентификатор информации о культуре) в пользовательском сообщении, чтобы MOC мог его забрать, к сожалению, документы в MSDN, похоже, считают, что это не требуется (возможно, это не так, но для правильной работы) это)

http://msdn.microsoft.com/en-us/library/dd941468(v=office.13).aspx

LCID (int): целое число, представляющее идентификатор местоположения. Необязательный

Это означает, что мне нужно добавлять пользовательское сообщение несколько раз, хотя для каждой потенциальной локали, в которой могут находиться получатели, использующие MOC, не кажется лучшим способом сделать это (см., Например, ниже).

string userStateXmlFormat = "<state xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" manual=\"true\" xsi:type=\"userState\">\n"
  + "<availability>{0}</availability>\n"
  + "<activity>\n" 
    + "<custom LCID=\"1033\" xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n"
    + "<custom LCID=\"2057\" xmlns=\"http://schemas.microsoft.com/2006/09/sip/state\">{1}</custom>\n" 
  + "</activity>\n"
+ "</state>";

В любом случае, я надеюсь, что это поможет кому-то еще, кто хочет общее сообщение для всех культур, может быть, ссылки выше также полезны для чтения, если вы хотите создать что-то подобное.

Другие вопросы по тегам