PresenceView создается с конечной точкой приложения, которая подготавливается вручную. Я снабдил его тремя целями, все из которых сообщают, что они "подписаны". Но я получаю только первое уведомление. После этого ничего не происходит. То же самое и с голосованием. Событие NotificationRecieved не срабатывает после первого уведомления. Журнал событий Lync не показывает никаких ошибок и никаких ожиданий.
Моя установка представляет собой виртуальную среду с контроллером домена, сервером Lync и машиной разработчика, которая также действует как пул приложений. Все выглядит нормально.
Ниже приведены некоторые примеры моего кода. Мое решение состоит из двух проектов: небольшого консольного приложения и проекта с кодом lync. Он основан на примере решения SubscribePresenceView из примеров кода UCMA, который прекрасно обновляет состояние присутствия, хотя вместо этого использует конечную точку пользователя.
public void Run()
{
_helper = new Helper(new ConsoleLogger());
_applicationEndpoint = _helper.CreateApplicationEndpoint();
var viewSettings = new RemotePresenceViewSettings();
viewSettings.SubscriptionMode = RemotePresenceViewSubscriptionMode.Default;
_presenceView = new RemotePresenceView(_applicationEndpoint, viewSettings);
List<RemotePresentitySubscriptionTarget> targets = new List<RemotePresentitySubscriptionTarget>();
targets.Add(new RemotePresentitySubscriptionTarget("sip:[email protected]"));
targets.Add(new RemotePresentitySubscriptionTarget("sip:[email protected]"));
targets.Add(new RemotePresentitySubscriptionTarget("sip:[email protected]"));
this.WireUpHandlersForView(_presenceView);
_presenceView.StartSubscribingToPresentities(targets);
}
Обработать метод делегата уведомления:
private void RemotePresenceView_NotificationReceived(object sender, RemotePresentitiesNotificationEventArgs e)
{
// A RemotePresentityNotification will contain all the
// categories for one user; Notifications can contain notifications
// for multiple users.
foreach (RemotePresentityNotification notification in e.Notifications)
{
Console.WriteLine("\nReceived a Notification for user "+ notification.PresentityUri + ".");
// If a category on notification is null, the category
// was not present in the notification. This means there were no
// changes in that category.
if (notification.AggregatedPresenceState != null)
{
Console.WriteLine("Aggregate State = " + notification.AggregatedPresenceState.Availability + ".");
}
if (notification.PersonalNote != null)
{
Console.WriteLine("PersonalNote: " + notification.PersonalNote.Message + ".");
}
if (notification.ContactCard != null)
{
// A ContactCard contains many properties; only display
// some.
ContactCard contactCard = notification.ContactCard;
Console.WriteLine("ContactCard Company: " + contactCard.Company + ".");
Console.WriteLine("ContactCard DisplayName: " + contactCard.DisplayName + ".");
Console.WriteLine("ContactCard EmailAddress: " + contactCard.EmailAddress + ".");
}
}
}
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.