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# 引起错误。
我正在设计的 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# 引起错误。