我想要做的是创建一个WCF服务,以获得用户的可用性。我已经通过以下快速启动示例: 名称:SubscribePresence http://msdn.microsoft.com/en-us/library/office/dn454835(v=office.15).aspx
我已设法做到这一点,但我觉得它不是获得用户可用性的最有效方式。
目前我创建了一个终端订阅用户状态并等待响应回来,并从中获得用户可用性。 (我正在简化这一点。)
我理想情况下只是为了快速获得用户可用性而无需订阅用户,并在检索到可用性后立即关闭连接。
我想知道是否有人知道我可以查看或他们自己实施的一个例子
任何建议都将不胜感激
答案 0 :(得分:0)
您还可以执行一次性状态查询。来自MSDN:
如果需要对远程在线实体进行一次性状态查询,则创建视图并将其拆除是应用程序的次优解决方案。此外,应用程序需要等待并跟踪是否已收到所有状态信息。
另一种方法是在端点的 PresenceServices 属性上使用
BeginPresenceQuery(IEnumerable<String>, [], EventHandler<RemotePresentitiesNotificationEventArgs>, AsyncCallback, Object)
和EndPresenceQuery(IAsyncResult)
方法。
请参阅http://msdn.microsoft.com/en-us/library/office/hh383136%28v=office.14%29.aspx
示例强>
您可以像这样调用状态查询。第3个位置的null
参数是事件处理程序,当收到状态时将触发该事件处理程序,因为我们处理EndPresenceQuery
的结果,所以不需要它。您也可以传递一个事件处理程序,而不关心EndPresenceQuery
的结果,这取决于您。
endpoint.PresenceServices.BeginPresenceQuery(
new[] { "sip:user@example.com" }, // Collection of sip addresses to query
new[] { "state" }, // Collection of presence catrgories to query
null, // The eventhandler to call when presence is recieved
(ar) => {
var result = endpoint.PresenceServices.EndPresenceQuery(ar);
// process the recieved containers in 'result' here.
},
null); // The state object
但是,当您为要进行多次查询的状态运行WCF服务时,我会说订阅状态可能比每次执行单个查询更好。我用以下逻辑构建了一个类似的系统:
这里的主要优点是,对于同一用户的存在的多个后续查询,您不会每次都查询Lync服务器。您的服务响应速度会快得多,并且您可以按下状态而不必每次都进行轮询。