Подавление пользовательского интерфейса - клиент застрял в состоянии SigningIn - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь войти в Skype для бизнеса через мое приложение.

Когда я включен, я могу войти в систему.

Когда я устанавливаю Подавление пользовательского интерфейса, мой клиент застревает в состоянии подписи. Ни событие учетных данных, ни событие 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;
        }
    }

Логин + пароль верны, потому что я могу войти с ними, когда пользовательский интерфейс включен.

Проблема возникает только тогда, когда пользовательский интерфейс отключен.

Я много чего пробовал, сейчас я в отчаянии.

1 Ответ

0 голосов
/ 29 января 2019

Пожалуйста, проверьте версию SkypeForBusiness. Если это 2016 год, то это происходит из-за того, что ModernAuthentication включена как на клиенте, так и на клиенте office365.

В случае, если включена ModernAuthentication, LyncSDK недостаточно способен обрабатывать ModernAuth, поскольку SDK не поддерживает и Microsoft не планирует обновлять SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...