如果你通過UCMA程序和別人在同一個會話裏同時使用了IM和語音,說不定有時候會遇見以下異常:
Microsoft.Rtc.Signaling.OperationFailureException: Application must register for ConversationChanged event when a call is moved to a derived conversation.
尤其是當你想要在只有IM或者應用共享的會話裏增加語音選項時異常總會發生,遠端會重定向語音給一個PSTN通話。也許是因爲對方沒有耳麥設備,或者是使用了無線設備導致通話質量太差,也可能他根本不能進行語音聊天。
這裏發生的就是會話裏的語音通話被通過Mediation服務器路由給了PSTN,而不是目標用戶。這樣語音呼叫就被從原始會話裏剝離出來到了一個新的,稱爲derived conversation的會話裏,並且這個會話有獨立的ID。你可以看一下這時候的原始Conversation對象,是沒有AudioVideoCall的,或者你可能看見多了一個PSTN與會者。你沒有辦法控制這個語音通話。基本上,UCMA爲了保護你會要求你綁定一個事件Call.ConversationChanged。
如果當derived conversation被創建時你希望收到通知,可以像這樣訂閱ConversationChanged事件:
avCall.ConversationChanged += new EventHandler<ConversationChangedEventArgs>(OnAvCallConversationChanged);
我希望它能把詳細信息輸出到控制檯,所以我這樣:
void OnAvCallConversationChanged(object sender, ConversationChangedEventArgs e) { Console.WriteLine("Call moved to derived conversation! Old ID: {0}. New ID: {1}. Reason: {2}.", e.PreviousConversation.Id, e.NewConversation.Id, e.Reason); }
這樣異常就被控制了。