尝试在 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 拒绝后接受传入的视频呼叫?
从第三方应用程序使用 Microsoft Lync 进行音频呼叫 - Lync SDK