Lync 2013 UCMA WCF Web服务

时间:2014-11-11 00:49:59

标签: wcf lync lync-2013 ucma

我想要做的是创建一个WCF服务,以获得用户的可用性。我已经通过以下快速启动示例: 名称:SubscribePresence http://msdn.microsoft.com/en-us/library/office/dn454835(v=office.15).aspx

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

目前我创建了一个终端订阅用户状态并等待响应回来,并从中获得用户可用性。 (我正在简化这一点。)

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

我想知道是否有人知道我可以查看或他们自己实施的一个例子

任何建议都将不胜感激

1 个答案:

答案 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服务时,我会说订阅状态可能比每次执行单个查询更好。我用以下逻辑构建了一个类似的系统:

  1. 在WCF上获取传入的状态请求。
  2. 如果WCF服务已知此SIP uri存在(已订阅),请立即返回缓存状态。
  3. 如果不知道,请订阅此状态。
  4. 收到状态后,返回结果并将状态添加到缓存中。
  5. 订阅用户每次更新其状态时,都会触发一个事件来更新缓存。
  6. 如果在一段时间内没有收到单个用户的状态查询,请取消订阅状态并从缓存中删除。
  7. 这里的主要优点是,对于同一用户的存在的多个后续查询,您不会每次都查询Lync服务器。您的服务响应速度会快得多,并且您可以按下状态而不必每次都进行轮询。