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

Posted

技术标签:

【中文标题】尝试在 Lync 2013 中接受音频呼叫时出现 System.UnauthorizedAccessException【英文标题】:System.UnauthorizedAccessException when trying to accept audio call in Lync 2013 【发布时间】:2015-05-18 22:47:59 【问题描述】:

我正在设计的 Lync 客户端存在问题。我在 UI 抑制模式下运行 Lync 2013,我能够很好地发送/接收 IM,并开始音频通话。但是当我尝试接收来自其他人的音频对话时会出现问题。当我尝试调用这行代码时,我得到一个 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

任何意见将不胜感激。令我感到奇怪的是,它仅在我尝试接听来电时才会发生。其他一切正常。我还没有开始进行视频通话,但是一旦音频工作正常我就会开始。

谢谢

编辑:

将 BeginConnect 替换为 BeginRetrieve 仍然会引发相同的错误并产生相同的结果。还是不知道该怎么办。

【问题讨论】:

【参考方案1】:

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

【讨论】:

C:\User\Me\Documents\Visual Studio 2012\Projects\我的项目【参考方案2】:

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

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

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

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

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

【讨论】:

我仍然不明白为什么 MSDN 建议的方法在这种情况下实际上不起作用。如果您尝试对 Lync 2010 客户端进行相同操作,则会收到 OperationPendingException,但仍然... 回复。你的表单创建问题,我不知道你到底得到了什么错误,但你应该只从 UI 线程访问 UI,它可能是 ConversationAdded 处理程序正在另一个线程运行。

以上是关于尝试在 Lync 2013 中接受音频呼叫时出现 System.UnauthorizedAccessException的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Lync Client API 2010 拒绝后接受传入的视频呼叫?

创建自定义音频视频呼叫 Lync 2010

从第三方应用程序使用 Microsoft Lync 进行音频呼叫 - Lync SDK

将 require 与 Typescript 和 Expo 一起使用时出现“无效呼叫”

在 lync sdk 2013 中检测音频设备并控制其音量

Lync 2013 即时消息字体和颜色