UI抑制-客户端停留在SigningIn状态

时间:2018-10-29 10:43:40

标签: c# wpf skype-for-business lync-client-sdk

我尝试通过我的应用程序登录Skype for Business。

启用UI时,我可以登录。

设置UI抑制后,客户端停留在该状态下的签名。凭据事件,SigninCallback事件或SignInDelayed事件均不会触发。

你能帮我吗?

这是我的代码:

public void StartUpSkype()
    {

        try
        {

            _LyncClient = LyncClient.GetClient();
            if (_LyncClient == null)
            {
                throw new Exception("Unable to obtain client interface");
            }
            if (_LyncClient.InSuppressedMode == true)
            {
                if (_LyncClient.State == ClientState.Uninitialized)
                {
                    Object[] _asyncState = { _LyncClient };
                    _LyncClient.BeginInitialize(InitializeCallback, _asyncState);
                }
            }
            _LyncClient.SignInDelayed += _LyncClient_SignInDelayed;
            _LyncClient.StateChanged += _Client_ClientStateChanged;
            _LyncClient.CredentialRequested += _LyncClient_CredentialRequested;

        }
        catch (NotStartedByUserException h)
        {
            DisplayErrorMessage("Lync is not running");
        }
        catch (Exception ex)
        {
            DisplayErrorMessage("General Exception");
        }
    }

void _Client_ClientStateChanged(Object source, ClientStateChangedEventArgs data)
    {
        if (data != null)
        {
            if (data.NewState == ClientState.SignedIn)
            {
                DisplayErrorMessage("Signed in");
                UserIsSignedIn?.Invoke(_LyncClient);
            }
            if (data.NewState == ClientState.SignedOut)
            {
                string login = ConfigurationManager.AppSettings["loginSkypeClient"];
                string password = ConfigurationManager.AppSettings["pwdSkypeClient"];

                _LyncClient.SignInConfiguration.ForgetMe(login);

                try
                {
                    // starts the sign in process asynchronously
                    IAsyncResult asyncResult = _LyncClient.BeginSignIn(login, login, password, SigninCallback, _LyncClient);

                    // But wait for the results because the events cannot be registered within a worker thread.
                    asyncResult.AsyncWaitHandle.WaitOne();

                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
    }

    void _LyncClient_CredentialRequested(object sender, CredentialRequestedEventArgs e)
    {
        string login = ConfigurationManager.AppSettings["loginSkypeClient"];
        string password = ConfigurationManager.AppSettings["pwdSkypeClient"];

        if (e.Type == CredentialRequestedType.SignIn)
        {
            e.Submit(login, password, false);
        }
    }

private void SigninCallback(IAsyncResult ar)
    {
        if (ar.IsCompleted == true)
        {
            try
            {
                ((LyncClient)ar.AsyncState).EndSignIn(ar);
            }
            catch (RequestCanceledException re)
            {
                throw re;
            }
        }

    }

private void InitializeCallback(IAsyncResult ar)
    {
        if (ar.IsCompleted == true)
        {
            object[] asyncState = (object[])ar.AsyncState;
            ((LyncClient)asyncState[0]).EndInitialize(ar);

            //_ThisInitializedLync is part of application state and is 
            //a class Boolean field that is set to true if this process
            //initialized Lync.
            _ThisInitializedLync = true;
        }
    }

登录名+密码正确无误,因为我可以在打开UI时使用它们登录。

仅当抑制UI时才会发生此问题。

我已经尝试了很多事情,我现在很绝望。

1 个答案:

答案 0 :(得分:0)

请检查SkypeForBusiness的版本。如果是2016年,则由于客户端和租户office365均启用了ModernAuthentication而发生。

如果启用了ModernAuthentication,则由于SDK不支持且Microsoft没有计划升级SDK,LyncSDK不足以处理ModernAuth。