获取 Lync 终结点的用户代理字符串

Posted

技术标签:

【中文标题】获取 Lync 终结点的用户代理字符串【英文标题】:Getting user agent string of a Lync endpoint 【发布时间】:2014-06-05 13:56:14 【问题描述】:

我正在构建一个基于 Lync 2013 的路由应用程序,使用 MSPL 中的路由,将请求分派到 ServerAgent,并使用它自己的 ApplicationEndpoint 使用 UCMA 可信应用程序处理呼叫。

现在我需要根据用户的活动端点配置路由。具体来说,我需要确定用户是否有一个端点,即 Lync Mobile(移动)客户端。

我可以在MSPL 脚本中获取用户端点列表,但这仅提供端点 ID、功能和 GRUU。我需要每个端点的用户代理字符串来确定合适的路由。

UCMA 中订阅用户的存在可以让我在各个端点上存在,但它也不会让我获得用户代理字符串。

到目前为止,我找到的唯一途径是访问 Lync .\rtclocal SQL 服务器并查询 rtcdyn.dbo.RegistrarEndpoint 表。这意味着向每个前端 SQL 服务器添加一个 SQL 连接,这是我想不惜一切代价避免的最后手段。

还有哪些其他选项(最好使用MSPLUCMA)来获取所有用户的端点,包括客户端版本/用户代理字符串?


编辑:

我检查了 MSPL 编译器代码,除了当前请求之外,似乎没有任何东西可以获取任何端点的用户代理字符串。有一些未记录的功能,但似乎对我没有任何帮助。 我检查了任何增强的存在容器是否有信息,但也没有发现任何信息。

编辑 2:

稍后进行一些挖掘,我认为最好的选择是从"machineState" 存在类别中获取设备类型。每个端点都发布其中一个,MSDN 上描述了 XML:state[@type='machineState'] element。它有一个device 元素,可以包含以下内容:

computer:设备是运行 Lync 2013 的计算机。deskphone:设备是运行 Lync Phone 的桌面电话版本正在运行。mobile:该设备是运行 Microsoft Lync 2010 for android、iPad、iPhone、诺基亚或 Windows Phone 的手机。 web:这是一台运行 Microsoft Lync Web App 的计算机。

但是如何从MSPL查询这个元素呢?有QueryCategory(..) 函数,但这似乎不返回机器状态,只返回聚合存在状态。

【问题讨论】:

【参考方案1】:

除非您可以将其视为 SIP 消息中的标头,否则我认为您无法从 MSPL 脚本中获取它。 (很明显,如果你可以看到它作为一个标题,那么你可以通过它来查询)

但是,一旦您发送了消息,在您发送到的方法中(包含Object source 参数,您可以使用

HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
string userAgent = context.Request.UserAgent;

获取 userAgent 字符串

【讨论】:

所有消息头在 MSPL 和托管代码中都可用,包括用户代理。这是发送当前请求的客户端的用户代理,但我正在寻找发送方其他端点的用户代理以决定路由。 您不能在它们进入时将它们全部捕获并保存在您自己的数据存储中以便在需要时进行查找吗?我认为 Lync 不会让您为其他端点的用户代理“查询”任何内容。但他们都会在某个时候通过你的 MSPL,所以你可以跟踪他们..

以上是关于获取 Lync 终结点的用户代理字符串的主要内容,如果未能解决你的问题,请参考以下文章

试图从asp.net web api self host中的请求中获取用户代理

发送自定义用户代理字符串以及我的标头(获取)

navigator.userAgent 没有提供完整的用户代理字符串

获取浏览器用户代理(user-agent)

DOM操作在用户代理字符串功能中不起作用

如何随机获取最新浏览器版本的用户代理? [复制]