2012-04-12 2 views
0

신뢰할 수있는 응용 프로그램 끝점에서 사용자는 외부 외부 공급자와 관련하여 상태를 게시해야하며이를 수행 할 수 있습니다. 나중에 외부 원본이 "유휴 상태" 다른 문제입니다.)Lync 2010 사용자 존재가 사용자 lync 클라이언트에 게시되지 않음

사용자 A에 대한 새 상태를 게시하면 해당 사용자가 자신의 Lync 클라이언트에 반영되지 않지만 다른 모든 사람이 업데이트를 가져 오지만 문제가되는 것은 무엇이 문제입니까?

user.Endpoint.LocalOwnerPresence.BeginPublishPresence(
     user.categories, 
     arBeginPublishPresence => 
     { 
      try 
      { 
       user.Endpoint.PresenceServices.EndUpdatePresenceState(arBeginPublishPresence); 
       logger.log("Published presence for {0} with state {1}.", user.SipUserUri, newState.Availability); 
      } 
      catch (RealTimeException ex) 
      { 
       logger.log("Failed publishing presence for {0}. {1}", user.SipUserUri, ex); 
      } 
     }, 
     null); 

user.categories은 다음과 같습니다 : 나는 게시 할 코드의 조각을 사용하고이 순간

  PresenceCategoryWithMetaData stateWithMetaDataForPersonal = new PresenceCategoryWithMetaData(++instanceId, 400, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForWorkgroup = new PresenceCategoryWithMetaData(instanceId, 300, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForColleagues = new PresenceCategoryWithMetaData(instanceId, 200, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForExternal = new PresenceCategoryWithMetaData(instanceId, 100, newState); 
      PresenceCategoryWithMetaData stateWithMetaDataForAll = new PresenceCategoryWithMetaData(instanceId, 0, newState); 
      if (instanceId >= Int64.MaxValue) 
      { 
       instanceId = 1; 
      } 

      stateWithMetaDataForPersonal.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForWorkgroup.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForColleagues.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForExternal.ExpiryPolicy = expirypolicy; 
      stateWithMetaDataForAll.ExpiryPolicy = expirypolicy; 

      stateWithMetaDataForPersonal.Expires = timeout; 
      stateWithMetaDataForWorkgroup.Expires = timeout; 
      stateWithMetaDataForColleagues.Expires = timeout; 
      stateWithMetaDataForExternal.Expires = timeout; 
      stateWithMetaDataForAll.Expires = timeout; 

      user.categories = 
       new List<PresenceCategoryWithMetaData>() 
         { 
          stateWithMetaDataForPersonal, 
          stateWithMetaDataForWorkgroup, 
          stateWithMetaDataForColleagues, 
          stateWithMetaDataForExternal, 
          stateWithMetaDataForAll 
         }; 

범주 카펫 폭격 존재 상태입니다, 그리고 나는 단지 을 알고있다. 나는 그것을 잘못하고있다. 이건 ... 지저분 할 수는 없어.

나는 C#, .NET 및 UCMA를 처음 접했고, 한 달 전까지 만지지 않았다.

답변

0

이것은 나에게 올바른 행동입니다. Lync는 단일 사용자 상태를 제공하기 위해 사용자가 로그인 한 모든 끝점에서 현재 상태를 집계합니다. 예를 들어, 사용자가 "자리 비움"으로 설정된 상태에서 자신의 PC에서 Lync에 로그인 한 상태에서 "사용 가능"상태 인 모바일 클라이언트에서도 모든 사용자가 "사용 가능"상태를 볼 수 있습니다. 그가 엔드 포인트 중 하나에 도달 할 수 있기 때문입니다. 그러나 Lync 클라이언트는 여전히 "자리 비움"상태입니다.

그래서 나는 똑같은 일이 여러분에게 일어나고 있다고 생각합니다. UCMA 앱은 현재 게시중인 다른 끝점입니다. "사용 가능"상태를 게시하고 있지만 UMCA 앱의 끝점에있는 것이므로 다른 사용자가 로그인 한 다른 끝점에는 영향을 미치지 않습니다. Lync 클라이언트. 그러나 다른 모든 사용자에게는 집계 된 현재 상태가 표시됩니다.

이것은 코드를 통해 입증 된 것 이상의 교훈있는 추측입니다. 나는 SDK를 통해 스카우트를 가졌지 만, 다른 엔드 포인트의 존재를 "오버라이드 (override)"할 수있는 방법을 볼 수 없다. 실제로 실제로는 잘못된 행동과 같이 느낀다.

+0

사실 ContainerId 2를 추가하는 것이 실제로 그렇게 된 것으로 나타났습니다. –

+0

그건 내가 짐작할 수 있습니다. 컨테이너 ID가 원하는 엔드 포인트에 다시 맵핑되는지 확인해야합니다. 사용자가 모바일 및 PC에 로그인 한 경우 두 가지 모두를 변경하거나 PC 만 타겟팅하려는 경우 업데이트 할 컨테이너를 이해해야합니다. 또한이 작업을 수행하고 Lync의 사용자 상태를 예를 들어 다음과 같이 설정합니다. 바쁘다, 당신의 변화를 덮어 씌우는 것을 되돌릴 수있는 아무 것도 없다. –

+0

나는 알고있다. 나는 또한 존재 업데이 트를 구독하려고했는데, 그것은 게시 된 존재가 새로운 게시물을 일으킨 수신 이벤트가 발생했을 때 몇 번 나에게 비트가 있었 ... 인스턴트 로그 필러 :) 그 걱정하지 않는 사람 xml 메시지 자체가 하나의 상태를 반환하는 상태 업데이트이지만 aggregatesState 객체는 -1이고 "None"입니다. –

관련 문제