发布未在用户lync客户端上显示的Lync 2010用户状态

时间:2012-04-12 14:35:30

标签: c# lync-2010 ucma user-presence

在受信任的应用程序端点中,我必须基于外部呈现提供程序发布用户状态,我可以这样做(稍后在外部源“空闲”时清除它们是另一个问题)

但问题是,如果我为用户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的新手,直到一个月前才接触到它。

1 个答案:

答案 0 :(得分:0)

这对我来说似乎是正确的行为。 Lync将聚合用户登录的所有端点上的状态,以提供单个状态。例如,如果用户在其PC上登录Lync并将其状态设置为“Away”,并且在他的移动客户端上存在“可用”,则所有用户都将看到“可用”的聚合状态 - 因为他可以到达其中一个端点。但是,他的Lync客户端仍然是“离开”。

所以我认为同样的事情正在发生在你身上。您的UCMA应用程序只是您从中发布状态的另一个端点。您可能正在发布“可用”状态,但它存在于UMCA应用程序中的端点,因此它不会影响他登录的任何其他端点,例如Lync客户端。但是,所有其他用户将看到聚合状态。

这比我用代码证明的任何东西都更有说服力。我有一个通过SDK的侦察员,但我看不到任何方式“覆盖”其他端点的存在(实际上,这样做强烈感觉就像是错误的行为)。