2014-10-08 2 views
2

Моя цель проста. Используя API Dynamics CRM 2013 и заданный URL-адрес, имя пользователя, пароль и домен, как я могу проверить, что значения действительны?Необходимо проверить достоверность учетных данных CRM

У меня есть собственное приложение, которое будет использовать API. У меня есть экран настройки, где пользователь вводит URL, имя пользователя, пароль и домен. У меня также есть кнопка «Test Connection», которая проверит, что она может подключиться с использованием этой информации.

Вот логика, я использую для создания соединения:

string connectionString; 
if (_crmDomain != "") 
    connectionString = string.Format(@"Url={0}; Username={1}\{2}; Password={3}", url, domain, userName, password); 
else 
    connectionString = string.Format(@"Url={0}; Username={1}; Password={2}", url, userName, password); 

var css = new ConnectionStringSettings("CRMConnectionString", connectionString); 
var cn = new CrmConnection(css); 
var service = new OrganizationService(cn); 

Вопрос заключается в том, что даже если учетные данные являются недействительными (возможно, неправильный пароль), линия, которая создает новый OrganizationService работает отлично. Есть ли способ проверить, что он будет работать, когда в конечном итоге будет выполнен фактический вызов?

Прямо сейчас я обойду его, сделав фиктивный вызов. Это заставляет его создавать соединение. Вот что я делаю:

var request = new RetrieveAllEntitiesRequest(); 
request.EntityFilters = EntityFilters.Entity; 
service.Execute(request); 

Если учетные данные не являются действительными, то service.Execute линия бросает исключение. Это прекрасно работает с одной проблемой. Предположим, что пользователь ввел действительные учетные данные и успешно нажал Test Connection. Теперь предположим, что они меняют пароль, чтобы быть неправильным, и нажмите «Проверить соединение». В этом случае он все еще преуспевает. Похоже, что используется ранее существующее соединение. Есть ли способ стереть или очистить предыдущее соединение, чтобы при попытке с недопустимыми значениями оно выдало исключение?

Опять же, моя общая цель - проверить значения входа. Независимо от того, что обеспечит наилучший способ выполнения этого, я буду после. Благодаря!

+0

http://msdn.microsoft.com/en-us/library/hh675404.aspx?cs-save-lang=1&cs-lang=csharp # code-snippet-1 – Donal

ответ

3

Оставьте использование ConnectionStringSettings и используйте CrmConnection.Parse().

var cn = CrmConnection.Parse(connectionString); 
var service = new OrganizationService(cn); 

try 
{   
    service.Execute(new WhoAmIRequest()); 
} 
catch (Exception ex) 
{ 
    //Do something because connection setup was bad 
} 

ОБНОВЛЕНО

Я побежал следующий код и получил ожидаемый результат, показанный ниже код. Когда пароль изменен на неверный пароль, запрос не работает, и когда он изменен на хороший пароль, он будет успешным.

var connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=goodpassword;"; 
var cn = CrmConnection.Parse(connectionString); 
var service = new OrganizationService(cn); 

try 
{   
    service.Execute(new WhoAmIRequest()); 
    Console.WriteLine("Good Password"); 
} 
catch 
{ 
    Console.WriteLine("Bad Password");  
} 

connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=badpassword;"; 
cn = CrmConnection.Parse(connectionString); 
service = new OrganizationService(cn); 

try 
{   
    service.Execute(new WhoAmIRequest()); 
    Console.WriteLine("Good Password"); 
} 
catch 
{ 
    Console.WriteLine("Bad Password");  
} 

connectionString = @"Url=https://server.com/orgname/;Username=domain\username;Password=goodpassword;"; 
cn = CrmConnection.Parse(connectionString); 
service = new OrganizationService(cn); 

try 
{   
    service.Execute(new WhoAmIRequest()); 
    Console.WriteLine("Good Password"); 
} 
catch 
{ 
    Console.WriteLine("Bad Password");  
} 

Выход на консоли:

Good Password 
Bad Password 
Good Password 
+0

Спасибо. Интересно, что, используя этот метод, после успешного открытия соединения, если я изменил URL-адрес или имя пользователя на что-то недействительное, тогда он терпит неудачу, когда я попробую еще раз. Однако, если я изменю пароль на что-то недействительное, он все равно будет успешным. Так что работает лучше, но не совсем. – Chris

+0

Пожалуйста, добавьте дополнительный код, чтобы продемонстрировать весь процесс, чтобы мы могли попытаться воспроизвести. Я обновил свой ответ с помощью кода, который я смог успешно выполнить. – Nicknow

Смежные вопросы