0

我想要做的是创建一个 WCF 服务只是为了获得用户的可用性。我浏览了以下快速入门示例: 名称:SubscribePresence http://msdn.microsoft.com/en-us/library/office/dn454835(v=office.15).aspx

我已经设法做到这一点,但我觉得这不是让用户可用性的最有效方式。

目前,我创建了一个订阅用户状态的端点并等待响应返回,然后我得到用户的可用性。(我正在简化这个)。

我最理想的情况是快速获得用户的可用性,而无需订阅用户的存在,并在我检索到可用性后立即关闭连接。

我想知道是否有人知道我可以查看的示例或者他们已经实现了自己

任何意见,将不胜感激

4

1 回答 1

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

例子

您可以像这样调用存在查询。第三个位置的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 服务时,我会说订阅状态可能比每次都执行单个查询更好。我曾经使用以下逻辑构建了一个类似的系统:

  1. 在 WCF 上获取传入状态请求。
  2. 如果 WCF 服务知道此 SIP uri 存在(已订阅),则立即返回缓存的存在。
  3. 如果不知道,请订阅存在。
  4. 收到出席信息后,返回结果并将出席信息添加到缓存中。
  5. 任何时候订阅用户更新他们的状态,都会触发一个事件来更新缓存。
  6. 如果在一段时间内没有收到单个用户的状态查询,则取消订阅状态并从缓存中删除。

此处的主要优点是,对于同一用户的状态的多个后续查询,您不必每次都查询 Lync 服务器。您的服务响应速度会快很多,并且您可以推送出席信息,而不必每次都进行轮询。

于 2014-11-11T10:37:13.457 回答