0

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

Lync 会在 15 分钟不活动后自动关闭对话。我发现了一个博客,它描述了一种通过发送“取消传输”消息来秘密保持对话活动的方法,但该解决方案使用 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>with style="display: none;"- 这可以使对话保持活跃,但是,当然,这会显示来自 Applicative User 的空消息

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

有任何想法吗?

4

2 回答 2

1

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


完全披露:
似乎答案完全隐藏在其他地方。
我在 Google Books 的一本名为“使用 Microsoft Lync Server 2010 的专业统一通信开发”的书中找到了一些有趣的信息,作者是 George Durzi、Michael Greenlee

关于Conversation' 属性的主题,AutoTerminateOnIdle它指出:

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

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

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

于 2014-11-06T13:39:52.313 回答
0

按照上面答案中的建议,将此添加到您的ConversationAdded事件中。

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

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

点击查看 Google 图书参考

于 2017-05-03T10:56:41.427 回答