Lync UserEndpoint在线显示给用户但无法调用

时间:2015-04-01 11:42:01

标签: c# lync-2013 ucma

我有一个基于Lync 2013的应用程序:

  1. 连接到UserEndpoint(以下称为CallCenter) 根据bla bla bla业务逻辑重定向对CallCenter的调用。
  2. 有时,用户会将标准Lync 2013客户端中的CallCenter视为联机,但如果该用户尝试使用CallCenter启动IM呼叫,则用户会收到消息“我们无法发送此消息,因为CallCenter不可用或离线。“
  3. 我无法确定导致此问题的过程,但如果发生在一个用户身上,那么所有其他用户在尝试呼叫CallCenter时都会遇到同样的问题。我能够恢复CallCenter的唯一方法就是重启我的应用程序。与CallCenter的定期交互然后恢复没有问题。

    如果CallCenter确实“不可用或离线”,那为什么它的Presence显示为“在线”?是否需要经常更新/保持CallCenter的连接?

    作为参考,我像这样连接CallCenter:

    UserEndpointSettings settings = new UserEndpointSettings(userURI, _ProxyHost, _ProxyPort);
    settings.AutomaticPresencePublicationEnabled = true;
    settings.Presence.UserPresenceState = PresenceState.UserAvailable;
    
    _userEndpoint = new UserEndpoint(_Platform.CollabPlatform, settings);
    _userEndpoint.BeginEstablish(res =>
    {
        try
        {
            _userEndpoint.EndEstablish(res);
            _userEndpoint.StateChanged += new EventHandler<LocalEndpointStateChangedEventArgs>(_userEndpoint_StateChanged);
        }
        catch (Exception ex)
        {
            LogError(ex, ErrorReference.EndpointEstablishFailed);
        }
    }, null);
    

1 个答案:

答案 0 :(得分:1)

在客户端中,当您离线或遇到错误时,您的存在会反映出来(大部分时间都是这样)。这可能会让您相信存在[1]的状态部分与实际可用性有某种联系。

当您与UCMA合作时,您可以最终控制与您的终端相关的所有内容。正如您所见,您可以使您的UCMA应用程序执行在常规客户端中无法实现的操作。您不必发布任何状态(让您&#34;离线&#34;到您的用户),但该服务仍然可以发送/接收即时消息。而且,正如您所见,您的服务可以是&#34;可用&#34;然而......没有能力做任何事情发布其状态[2]。

如果您未能连接相应的模式(在您的情况下为IM),或者您的应用程序遇到导致特定模态不再有效的异常(我怀疑这可能是您的实际问题),您的服务状态仍然可用

UserEndpoint上的Begin / EndTerminate应该自动为您发布离线状态,并且发布除“可用”以外的状态是唯一可以保证状态不会出现的可用性#34;在应用程序的生命周期中(甚至在应用程序结束/过早死亡之后,虽然这有时会被服务器纠正 - 有时)。

以下是我如何解决此问题。忽略存在问题并忽略错误。他们是红色的鲱鱼。许多问题导致&#34;不可用或离线&#34;与实际停止的服务无关的消息。

相反,弄清楚为什么你的电话没有连接。

如果在收到错误之前调用需要一段时间,请检查线程池没有其他线程空间的死锁或情况。故障排除涉及查看竞争条件的代码以及多线程应用程序引发的无数其他事情。如果IMCall立即失败,请检查处理来电的部分。在后一种情况下,您的订阅可能会消失(此处列出的原因太多,其中大多数是.Net相关的,而不是UCMA相关的),或者您的服务可能已经死亡。

如果在您的应用程序中存在的重要性仅仅是将其显示为&#34;可用&#34;或&#34;离线&#34;当它实际上能够发送/接收IM时,您将需要确保您的应用程序在拆除期间正确终止端点(包括在严重故障的情况下:catch-terminate-rethrow或者其他什么是适用于您的情况)。

[1]在考虑术语&#34;存在时要小心。因为它与Lync有关。 Presence包含可用性状态,模态特定状态,功能(IM /语音等),&#34; note&#34;和联系信息。

[2]这似乎是一件奇怪的事情,但是,它让我能够使用ApplicationEndpoint来报告我希望能够在其中查看的Web服务(与Lync无关)的可用性。移动客户端无需通过VPN连接。在做这样的事情时,发布端点的功能非常重要 - 这将明确向您的连接客户发出您的服务可以做什么和不能做什么的信号。

[最后脚注]有几种方法可以发布在线状态。如果您只是想告诉您的用户&#34;服务在这里&#34; /&#34;服务不是,那么您用来发布的机制是最简单和最合乎逻辑的。这里&#34;这里有相当好的记录:Simplified Presence Publication for Endpoints