2014-11-12 3 views
0

Я делаю «свой собственный клиент Lync». Я последовал за несколькими примерами в Интернете о том, как подписать Lync-клиент в режиме Ui Suppression. Я могу заставить клиента войти в систему, но затем он сразу же заходит, выписывая и подписываясь.LyncClient застрял в цикле входа

Что вызывает это?

2014-11-12 08:18:30.4381|DEBUG|LyncWpf.MainWindow|InitClient 
2014-11-12 08:18:31.2021|DEBUG|LyncWpf.MainWindow|InitializeCallback 
2014-11-12 08:18:31.2131|DEBUG|LyncWpf.MainWindow|StateChanged Uninitialized to Initializing 
2014-11-12 08:18:31.2131|DEBUG|LyncWpf.MainWindow|StateChanged Initializing to SignedOut 
2014-11-12 08:18:31.4221|DEBUG|LyncWpf.MainWindow|StateChanged SignedOut to SigningIn 
2014-11-12 08:18:51.8631|DEBUG|LyncWpf.MainWindow|SigninCallback 
2014-11-12 08:18:52.0151|DEBUG|LyncWpf.MainWindow|StateChanged SigningIn to SignedIn 
2014-11-12 08:18:52.0211|INFO|LyncWpf.MainWindow|signed in! 
2014-11-12 08:18:52.5451|DEBUG|LyncWpf.MainWindow|StateChanged SignedIn to SigningOut 
2014-11-12 08:18:52.5591|DEBUG|LyncWpf.MainWindow|StateChanged SigningOut to SigningIn 
2014-11-12 08:18:53.6051|DEBUG|LyncWpf.MainWindow|StateChanged SigningIn to SignedIn 
2014-11-12 08:18:53.6071|INFO|LyncWpf.MainWindow|signed in! 
...repeated forever 

Образец образца. Заметьте, я не звоню BeginSignIn снова.

private void _client_StateChanged(object sender, ClientStateChangedEventArgs e) 
    { 
     this.Log().Debug("StateChanged {0} to {1}", e.OldState.ToString(), e.NewState.ToString()); 
     switch (e.NewState) 
     { 
      case ClientState.SignedIn: 
       this.Log().Info("signed in!"); 
       break; 
      case ClientState.SignedOut: 
       if (e.OldState == ClientState.Initializing) 
        ((LyncClient) sender).BeginSignIn(null, null, null, SigninCallback, sender); 
       break; 
     } 
    } 
    private void InitClient() 
    { 
     this.Log().Debug("InitClient"); 
     _client = LyncClient.GetClient(true); 
     if (_client.InSuppressedMode) 
     { 
      _client.StateChanged += _client_StateChanged; 
      if (_client.State == ClientState.Uninitialized) 
      { 
       Object[] asyncState = { _client }; 
       _client.BeginInitialize(InitializeCallback, asyncState); 
      } 
     } 
    } 
    private void InitializeCallback(IAsyncResult ar) 
    { 
     this.Log().Debug("InitializeCallback"); 
     if (ar.IsCompleted) 
     { 
      object[] asyncState = (object[])ar.AsyncState; 
      ((LyncClient)asyncState[0]).EndInitialize(ar); 
     } 
    } 
    private void SigninCallback(IAsyncResult ar) 
    { 
     this.Log().Debug("SigninCallback"); 
     if (ar.IsCompleted) 
     { 
      try 
      { 
       ((LyncClient)ar.AsyncState).EndSignIn(ar); 
      } 
      catch (RequestCanceledException re) 
      { 
       this.Log().Warn("SignIn Request Cancelled {0}", re.Message); 
       throw; 
      } 
     } 

    } 

ответ

1

У меня была такая же проблема на втором запуске приложения. В моем случае это произошло потому, что Lync 2013 shutdown api работает некорректно и оставляет копию lync в памяти. Когда вы запускаете свое приложение во второй раз, он создает новый экземпляр lync с подавленным ui, и оба экземпляра, похоже, сражаются с каждым, чтобы войти в систему.

Я нашел единственный способ исправить это, чтобы убить любые фоновые процессы lync (т. Е. Не имеет дескриптора главного окна).

+0

Я забыл об этом вопросе; и я нашел то же самое. Вам необходимо убить lync.exe, возникший из svchost.exe. Если вы закрываете клиента должным образом, у меня не было проблемы. – hometoast