在受信任的应用程序端点中,我必须基于外部呈现提供程序发布用户状态,我可以这样做(稍后在外部源“空闲”时清除它们是另一个问题)
但问题是,如果我为用户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 :(得分:0)
这对我来说似乎是正确的行为。 Lync将聚合用户登录的所有端点上的状态,以提供单个状态。例如,如果用户在其PC上登录Lync并将其状态设置为“Away”,并且在他的移动客户端上存在“可用”,则所有用户都将看到“可用”的聚合状态 - 因为他可以到达其中一个端点。但是,他的Lync客户端仍然是“离开”。
所以我认为同样的事情正在发生在你身上。您的UCMA应用程序只是您从中发布状态的另一个端点。您可能正在发布“可用”状态,但它存在于UMCA应用程序中的端点,因此它不会影响他登录的任何其他端点,例如Lync客户端。但是,所有其他用户将看到聚合状态。
这比我用代码证明的任何东西都更有说服力。我有一个通过SDK的侦察员,但我看不到任何方式“覆盖”其他端点的存在(实际上,这样做强烈感觉就像是错误的行为)。