通过客户端 SDK 使 Lync MeetNow 对话保持活跃

Posted

技术标签:

【中文标题】通过客户端 SDK 使 Lync MeetNow 对话保持活跃【英文标题】:Keep Lync MeetNow conversation alive from Client SDK 【发布时间】:2014-11-06 11:02:35 【问题描述】:

我有一个应用程序,它依赖于服务器上的专用 Lync 客户端来管理临时 MeetNow 房间。

Lync 会在 15 分钟不活动后自动关闭对话。我通过发送“取消传输”消息找到了a blog describing a way to surreptitiously keep the conversation alive,但该解决方案使用 UCMA,而我只有 2013 Lync Client SDK 可用。 它的完成方式(基本上)是:

var contentType = new System.Net.Mime.ContentType("text/x-msmsgsinvite");
var s = @"Application-Name: File Transfer\r\nInvitation-Command: CANCEL\r\nInvitation-Cookie: 12345\r\n");
byte[] htmlBytes = Encoding.UTF8.GetBytes(s);
Flow.BeginSendInstantMessage(contentType, htmlBytes, EndSendInstantMessage, Flow);

但是,这又是使用 UCMA。 Lync 客户端 SDK 的工作方式并不完全相同。 我需要使用对话模式来发送消息,并且我无法将内容类型设置为text/x-msmsgsinvite,因为它使用InstantMessageContentTypeEnum,其中唯一可用的内容类型是:Invalid, PlainText, Html, RichText, Gif, Ink, Unknown

我使用 2013 Client SDK 所做的尝试:

(首先,我确保Modality.State 已连接 - 确实如此)。

我尝试发送空消息 - 收到异常消息,指出 Value does not fall within the expected range.我可能会误解这一点,但我认为它的意思是空字符串不会产生消息。

我尝试仅发送内容类型设置为 Invalid 的随机消息 - 收到消息 Unknown InstantMessageContentType. Type is Invalid 的异常。 (实际上不希望这个成功)

我尝试发送内容类型设置为 Html 的消息,其中该消息包含 <div>style="display: none;" - 这可以使对话保持活跃,但是,当然,这显示一个空来自应用用户的消息

我非常希望避免发送在 MeetNow 会议室中显示的实际消息(即使它显示的只是应用用户的姓名)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

&tldr; :将AutoTerminateOnIdle 属性设置为true。这将使对话不会终止!


全面披露: 似乎答案完全隐藏在其他地方。 我在 Google Books 的一本名为 "Professional Unified Communications Development with Microsoft Lync Server 2010" By George Durzi, Michael Greenlee 的书中发现了一些有趣的信息。

关于Conversation 的属性AutoTerminateOnIdle 的主题是:

[...] 设置对话的AutoTerminateOnIdle 属性 false 在 UI 抑制模式下确保应用程序 音频后仍然可以访问对话及其属性 视频模式不再有效。这允许应用程序 重新启动模态的音频或视频通道,因为 对话 i 未处于终止状态。如果对话包含 即时消息和音频视频模式,它只会 当两种模式都变为非活动状态时终止。 设置 AutoTerminateOnIdle 属性到true 确保底层 对话永远不会进入终止状态,允许应用程序 根据需要再次连接到任一模式。 [...]

只是我还是用粗体标记的部分与物业名称的期望完全相反?!?!如果true从不进入终止状态?!什么鬼?

无论哪种方式,我都对其进行了测试 - 离开一个房间只是坐在那里半个小时,什么都不做。客户甚至进入“离开”状态 => 对话保持开放。呵呵!

【讨论】:

你能澄清一下吗?将 AutoTerminateOnIdle 设置为 true 将使对话保持活跃,而不是超时? Lync SDK 文档是热垃圾,但这尤其令人困惑 @EricRRichards 没错!完全不直观地向后设置 AutoTerminateOnIdle 将使 MeetNow 对话保持活跃!【参考方案2】:

按照上述答案中的建议将其添加到您的 ConversationAdded 事件中。

            e.Conversation.BeginSetProperty(ConversationProperty.AutoTerminateOnIdle, true, null, null);

即使在 1 2 小时不活动之后,这也将始终让您的对话保持活跃。

Click to view Google Book Reference

【讨论】:

以上是关于通过客户端 SDK 使 Lync MeetNow 对话保持活跃的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Lync SDK 通过电子邮件确定是不是存在有效的 Lync 用户?

Lync 客户端 SDK PSTN 呼叫

关闭 Lync 客户端(并排)与 Lync SDK 2013 留下孤立的进程

我可以使用 Lync 2010 SDK 启动 Lync 2010 客户端应用程序吗

Lync 客户端 SDK 控件的 UI 是不是有任何更改?

Lync SDK (Microsoft.Lync.Model)