我只需要给出一个电子邮件地址,并让ucma协议将用户的存在从skype发送回业务使用C#。
有没有人对如何获得用户在ucma中的存在有一些建议?关于msdn的教程对此并不清楚。
这是我目前的代码
List<string> targets = new List<string>();
targets.Add("sip:fry@nnylync.info");
_endpoint.PresenceServices.BeginPresenceQuery(targets, new string[] {"state"}, null, ar =>
{
List<RemotePresentityNotification> presence = new List<RemotePresentityNotification>(_endpoint.PresenceServices.EndPresenceQuery(ar));
foreach (RemotePresentityNotification rpn in presence)
{
Console.WriteLine(rpn.PresentityUri + " is " + rpn.AggregatedPresenceState.EndpointLocation);
}
}, null);发布于 2019-09-26 18:54:58
你的代码看起来很好。我唯一想说的是,它返回了为sip地址注册的所有端点的存在状态列表。您通常希望使用的是聚合存在,即所有skype应用程序使用和显示的总体存在。
所以你通常会使用:
。
其中还有很多其他信息,包括用户可以设置的所有其他信息,比如位置、(EndpointLocation)和注意事项(PersonalNote).。
另外,使用的是queryResultHandler参数(您在示例中传入null,这很好)。这将在出现结果可用时调用。当您为查询提供多个sip地址列表时,这是非常有用的。当所有存在结果都进入时(即整个操作完成),就会调用userCallback,这可能需要一段时间,任何故障都将导致对EndPresenceQuery调用的整个调用失败。当每个成功的存在结果出现时,queryResultHandler将被多次调用,因此您可以更快地获得结果,并且看到所有成功的结果,即使某些结果可能失败并导致EndPresenceQuery抛出。
除此之外,如果希望随时了解端点何时更改存在,还可以订阅端点以进行存在更改。您必须小心订阅,因为一个端点可以订阅它们的数量是有限制的。这是进入轮询和订阅的订阅类型的地方。根据您正在编写的应用程序类型,取决于您需要的订阅类型。通常,您只想订阅当前正在显示/使用的端点。
https://stackoverflow.com/questions/58108936
复制相似问题