尝试接受Lync 2013中的音频呼叫时出现System.UnauthorizedAccessException

时间:2015-05-18 22:47:59

标签: c# winforms lync

我正在设计的Lync客户端出现问题。我在UI抑制模式下运行Lync 2013,我可以发送/接收即时通讯,并开始音频通话。但是当我尝试从其他人那里接收音频对话时会出现问题。当我尝试调用这行代码时,我得到一个System.UnauthorizedAccessException:

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

它运行完全正常,否则通话没问题,我可以听到和对方说话很好,但我的用户界面冻结,我无法控制任何由于此错误。即使对方挂断,我也必须在任务管理器中终止该过程。

这是我的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仍会引发相同的错误并产生相同的结果。仍然不确定该怎么做。

2 个答案:

答案 0 :(得分:1)

您从哪里运行应用程序?我有一个非常相似的堆栈跟踪,并将应用程序移动到“C:\ Users \ MyUser”解决了我的问题。

答案 1 :(得分:1)

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

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

您无需调用BeginConnect来连接音频。删除BeginConnect可防止抛出错误,并且音频连接正常。 BeginConnect用于连接视频。

我的问题是表单没有完全加载和冻结是无关的,它出现了。这是因为我试图在ConversationManager_ConversationAdded中创建一个新表单。如果我尝试在按钮单击上创建一个新表单,它加载就好并且有效,但似乎是阻止它正常工作的事件。

我不能很好地识别Lync或C#引起错误的时间。