System.UnauthorizedAccessException 在 Lync 2013 中尝试接受音频呼叫时

System.UnauthorizedAccessException when trying to accept audio call in Lync 2013

我正在设计的 Lync 客户端有问题。我 运行 Lync 2013 处于 UI 抑制模式,我能够 send/receive IM 正常,并开始音频通话。但是,当我尝试接收其他人的音频对话时出现问题。当我尝试调用这行代码时,我得到一个 System.UnauthorizedAccessException:

conv.Modalities[ModalityTypes.AudioVideo].BeginConnect(ModalityCallback, asyncState);

它在其他方面运行得非常好,通话顺利进行,我可以很好地听到对方的声音并与另一方通话,但是我的用户界面冻结并且由于这个错误我无法控制任何事情。就算对方挂了,我也得在任务管理器里kill进程

这是我的 InitiateAVStream 方法,基于 MSDN Join Lync conversation example:

    public bool InitiateAVStream()
    {
        Console.WriteLine("InitiateAVStream");
        if (conv.State == ConversationState.Terminated)
        {
            return false;
        }

        if (conv.Modalities[ModalityTypes.AudioVideo].CanInvoke(ModalityAction.Connect))
        {
            conv.Modalities[ModalityTypes.AudioVideo].ModalityStateChanged += _AVModality_ModalityStateChanged;
            conv.Modalities[ModalityTypes.AudioVideo].ActionAvailabilityChanged += _AVModality_ActionAvailabilityChanged;

            //Accept the notification. If Lync UI is enabled, incoming call notification is closed.
            conv.Modalities[ModalityTypes.AudioVideo].Accept();

            //Connect the AV modality and begin to send and received AV stream.
            object[] asyncState = { conv.Modalities[ModalityTypes.AudioVideo], "CONNECT" };
            try
            {
                conv.Modalities[ModalityTypes.AudioVideo].BeginConnect(ModalityCallback, asyncState);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.StackTrace);
            }
            return true;
        }
        return false;

    }

输出信息:

A first chance exception of type 'System.UnauthorizedAccessException' occurred in Microsoft.Lync.Model.dll 
at Microsoft.Office.Uc.ModalityClass.Connect(ModalityConnectOptions _options, Object _modalityCallback, Object _state)
at Microsoft.Lync.Model.Conversation.Modality.BeginConnect_private(ModalityConnectOptions options, AsyncCallback modalityCallback, Object state)
at Microsoft.Lync.Model.Conversation.Modality.BeginConnect(AsyncCallback modalityCallback, Object state)
at UIPrototype.MeetingForm.InitiateAVStream() in c:\Users\morrissi\Documents\Visual Studio 2012\Projects\UIPrototype\UIPrototype\MeetingForm.cs:line 758

如有任何意见,我们将不胜感激。令我感到奇怪的是,它仅在我尝试接受传入的音频呼叫时才会发生。其他一切正常。我还没有开始进行视频通话,但一旦我开始使用音频,我就会开始。

谢谢

编辑:

用 BeginRetrieve 替换 BeginConnect 仍然会引发相同的错误并产生相同的结果。仍然不确定该怎么做。

你运行你的申请来自哪里?我有一个非常相似的堆栈跟踪并将应用程序移动到 "C:\Users\MyUser" 为我解决了这个问题。

我能够解决问题。显然,当您只连接音频呼叫时,您唯一需要的线路是

conv.Modalities[ModalityTypes.AudioVideo].Accept();

您不需要调用 BeginConnect 来连接音频。删除 BeginConnect 可以防止错误被抛出并且音频连接仍然很好。 BeginConnect 用于连接视频。

我的表单未完全加载和冻结问题似乎无关。这是因为我试图在 ConversationManager_ConversationAdded 中创建一个新表单。如果我尝试在单击按钮时创建一个新表单,它会加载得很好并且可以正常工作,但它似乎是阻止它正常工作的事件。

我在这方面还不够好,无法识别何时由 Lync 或 C# 引起错误。