2015-05-29 4 views
1

Я сделал небольшое приложение, которое позволяет мне обновляться, когда один из моих контактов имеет изменение доступности. В настоящее время я регистрирую это только.Lync Client SDK: получение иногда странно ContactAvailability

Я нашел большой Ressource здесь: https://rcosic.wordpress.com/2011/11/17/availability-presence-in-lync-client/

Которые в основном советуют следующее:

//Register to a contact 
Contact contactByUri = _lyncClient.ContactManager.GetContactByUri(user.UserUri); 
contactByUri.ContactInformationChanged += new EventHandler(Self_ContactInformationChanged); 

void Self_ContactInformationChanged(object sender, ContactInformationChangedEventArgs e) 
{ 
    Contact self = sender as Contact; 

    // has user changed his availability (therefore, his presence status)? 
    if (e.ChangedContactInformation.Contains(ContactInformationType.Availability)) 
    { 
     ContactAvailability availability = (ContactAvailability)self.GetContactInformation(ContactInformationType.Availability); 
     string activity = (string)self.GetContactInformation(ContactInformationType.Activity); 
     OnAvailabilityChanged(availability, activity); 
    } 
} 

Где Доступность является один из следующих:

Invalid (-1), 
None (0) – Do not use this enumerator. This flag indicates that the cotact state is unspecified., 
Free (3500) – A flag indicating that the contact is available, 
FreeIdle (5000) – Contact is free but inactive, 
Busy (6500) – A flag indicating that the contact is busy and inactive, 
BusyIdle (7500) – Contact is busy but inactive, 
DoNotDisturb (9500) – A flag indicating that the contact does not want to be disturbed, 
TemporarilyAway (12500) – A flag indicating that the contact is temporarily away, 
Away (15500) – A flag indicating that the contact is away, 
Offline (18500) – A flag indicating that the contact is signed out. 

Большую часть времени , все работает нормально, но через несколько дней я получаю ContactAvailability = None.

Я хотел бы знать, почему, и если есть что-то, что я могу сделать, чтобы решить эту проблему? (Как сбросить клиентский sdk, ...)?

ответ

0

Я никогда не думал о хорошей рифме или причине, почему Lync иногда не сообщает о реальной доступности контакта. Иногда я вижу это в коде UCMA, где я могу подписаться на обновления присутствия для пользователя, а в событии обратного вызова получаю уведомления о том, что их значение AggregatePresenceState равно null.

Я еще не вникнул в него, но, возможно, установил, что учет клиента Lync до максимальной многословности и проверка следов с помощью инструмента Snooper или использование Wireshark выявили поврежденные сообщения SIP NOTIFY?

Кроме того, стоит отметить, что пример код Microsoft в SDK для разбора необработанного значения ContactInformationType.Availability целого в значение ContactAvailability перечислений (https://msdn.microsoft.com/en-us/library/office/jj937284.aspx) не соответствует их собственным спецификациям (https://msdn.microsoft.com/en-us/library/cc431501(v=office.12).aspx) по результатам выборки коды в недопустимые 0 значений доступности, которые интерпретируются как Интернет.

0

вы можете попробовать.

List <ContactInformationType> contactInformationList = new List<ContactInformationType>(); 
//contactInformationList.Add(ContactInformationType.Activity); 
contactInformationList.Add(ContactInformationType.Availability); 
// contactInformationList.Add(ContactInformationType.CapabilityString);    
ContactSubscription contactSubscription = 
LyncClient.GetClient().ContactManager.CreateSubscription(); 

и добавить контакт вы хотите подписаться

contactSubscription.AddContact(contact);       
contactSubscription.Subscribe(ContactSubscriptionRefreshRate.High,contactInformationList); 

, а затем попытаться запросить наличие с помощью

contact.GetContactInformation(ContactInformationType.DisplayName).ToString()+" "+ contact.GetContactInformation(ContactInformationType.Availability).ToString(); 

 Смежные вопросы

  • Нет связанных вопросов^_^