0

我正在努力在我构建的 UMCA IVR 应用程序中进行呼叫转移。这不使用 Lync。

本质上,我有一个来自外部用户的既定电话,作为 IVR 应用程序的一部分,他们选择了一个要转移的选项。此转移是到配置的外部号码(即:我们的现场接线员)。我要做的是将原始呼叫者转移到外线号码,如果建立有效转移,我想终止原始呼叫。如果未建立传输,我想将控制权发送回 IVR 应用程序以优雅地处理此问题。

我的问题是建立传输时我的 EndTransferCall 没有受到打击。我原以为它会命中,设置我的 AutoResetEvent 并返回 True,然后在我的应用程序中我可以断开原始呼叫。有人可以告诉我我在这里缺少什么吗?

_call 是一个已建立的 AudioVideoCall。我的应用程序调用 Transfer 方法

private AutoResetEvent _waitForTransferComplete = new AutoResetEvent(false);

public override bool Transfer(string number, int retries = 3)
        {
            var success = false;
            var attempt = 0;

            CallTransferOptions transferOptions = new CallTransferOptions(CallTransferType.Attended);

            while ((attempt < retries) && (success == false))
            {
                try
                {
                    attempt++;

                    _call.BeginTransfer(number, transferOptions, EndTransferCall, null);

                    // Wait for the transfer to complete
                    _waitForTransferComplete.WaitOne();

                    success = true;
                }
                catch (Exception)
                {
                    //TODO: Log that the transfer failed
                    //TODO: Find out what exceptions get thrown and catch the specific ones
                }
            }

            return success;
        }

        private void EndTransferCall(IAsyncResult ar)
        {
            try
            {
                _call.EndTransfer(ar);
            }
            catch (OperationFailureException opFailEx)
            {
                Console.WriteLine(opFailEx.ToString());
            }
            catch (RealTimeException realTimeEx)
            {              
                Console.WriteLine(realTimeEx.ToString());
            }
            finally
            {
                _waitForTransferComplete.Set();
            }
        }
4

1 回答 1

0

如果不使用 _waitForTransferComplete 对象,行为是否相同?你不应该需要它——方法结束应该没问题,事件仍然会被引发。如果您强制同步行为以适应应用程序的其余部分,请尝试如下:

_call.EndTransfer(
  _call.BeginTransfer (number,transferOptions,null,null)
   );

我只是想知道如果在单个线程上运行或其他什么东西,这样的等待是否会导致问题......

于 2013-04-11T16:10:12.307 回答