1

在受信任的应用程序端点中,我必须根据外部存在提供者发布用户状态,我可以这样做(稍后在外部源变为“空闲”时清除它们是一个不同的问题)

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

4

1 回答 1

0

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

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

这更像是一个有根据的猜测,而不是我用代码证明的任何东西。我已经通过 SDK 进行了侦察,但我看不到任何方法可以“覆盖”另一个端点的存在(实际上,这样做强烈感觉像是错误的行为)。

于 2012-04-19T21:25:34.297 回答