2015-06-24 33 views
6

Pracuję nad jedną aplikacją C#, która służy do pobierania danych z Dynamics CRM Online. Aby zweryfikować nazwę użytkownika i hasło Dynamics CRM, używam modułu WhoAmIRequest. Działa dobrze, dopóki nie pojawi się poniższy scenariusz.Dynamics CRM SDK w C# connect with Invalid Password

1) Połącz Dynamics CRM z prawidłowym adresem URL, nazwą użytkownika i hasłem.

2) Usuń obiekt usługi organizacji.

3) Ponownie połącz Dynamics CRM z prawidłowym adresem URL, nazwą użytkownika i błędnym hasłem.

W tym scenariuszu również WhoAmIRequest zostało wykonane pomyślnie. Ale powinno zawieść.

Poniżej znajduje się kod używam:

private void button6_Click(object sender, EventArgs e) 
    { 
     CrmConnection connection; 
     string url = "Url=https://mytest.crm.dynamics.com ;[email protected]; Password=goodpassword;"; 
     connection = CrmConnection.Parse(url); 
     OrganizationService orgService = new OrganizationService(connection); 
     Guid userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId; 
     if (userid == null) 
      MessageBox.Show("Login Failed"); 
     else 
      MessageBox.Show("Login Success"); 
     orgService.Dispose(); 

     url = "Url=https://mytest.crm.dynamics.com ;[email protected]; Password=badpassword;"; 
     connection = CrmConnection.Parse(url); 
     orgService = new OrganizationService(connection); 
     userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId; 
     if (userid == null) 
      MessageBox.Show("Login Failed"); 
     else 
      MessageBox.Show("Login Success"); 
     orgService.Dispose(); 

     url = "Url=https://mytest.crm.dynamics.com ;[email protected]; Password=goodpassowrd;"; 
     connection = CrmConnection.Parse(url); 
     orgService = new OrganizationService(connection); 
     userid = ((WhoAmIResponse)orgService.Execute(new WhoAmIRequest())).UserId; 
     if (userid == null) 
      MessageBox.Show("Login Failed"); 
     else 
      MessageBox.Show("Login Success"); 
     orgService.Dispose(); 
    } 

Wyjście powyższego kodu pokazuje okno 3 Wiadomość jako

Logowanie Sukces

Logowanie Sukces

Logowanie Success

Ale powinno się pokazać jako

Logowanie Sukces

Login Failed

Logowanie Sukces

Próbowałem również odpowiedź sugerują przez Nicknow w tym Need to validate CRM credentials pytanie, ale nic nie pomaga

Każda pomoc będzie bardzo mile widziane.

Dzięki i Pozdrawiam Venkatesan

+0

Kiedy próbuję to zrobić, to poprosić mnie o poświadczenia, czy masz ważny użytkownikowi w tej odpowiedzi? – Sxntk

+0

Dzięki za odpowiedź Sxntk, To nie jest poprawne poświadczenie, które właśnie zmodyfikowałem, aby niektóre z nich były nieprawidłowe, na przykład dlatego, że poświadczenie, którego używam, jest ograniczone do udostępniania. W celach testowych możesz utworzyć konto próbne w dynamice CRM. Daj mi znać, jeśli chcesz poświadczenia. – user3270512

+0

Próbuję tego na moim crm na założeniu, więc kiedy wyrzucę usługę i spróbuję uwierzytelnić się przy użyciu niewłaściwego hasła, wyskakuje aktywny katalog, więc jeśli nie podam prawidłowych poświadczeń, to się nie powiedzie. – Sxntk

Odpowiedz

4

Problem polega na czeku tutaj:

if (userid == null)

userid jest GUID, GUID jest struct, struct jest typ wartości, a wartość type nigdy nie będzie null, więc sprawdzanie zawsze zwraca wartość false.

Zobacz tutaj, aby uzyskać więcej informacji Guid == null should not be allowed by the compiler

Proponuję stosując następujący czek zamiast:

if (userid == Guid.Empty)

+0

Dzięki za sugestię James, spróbowałem twojej sugestii i otrzymałem ten sam rezultat. Akceptuje nieprawidłowe hasło tylko w poniższym scenariuszu. 1) Połącz Dynamics CRM z prawidłowym adresem URL, nazwą użytkownika i hasłem. 2) Usuń obiekt usługi organizacji. 3) Ponownie połącz Dynamics CRM z prawidłowym adresem URL, nazwą użytkownika i błędnym hasłem. Gdy próbujemy zalogować się przy użyciu nieprawidłowego hasła na samym początku, komunikat o błędach jest wyświetlany poprawnie. – user3270512