2013-08-13 4 views
1

Каков наилучший способ узнать, успешно ли подключен DeviceServiceProxy к CRM?

Я использую GetEnumerator() в AccountSet, поскольку это не удается, если не подключено.
Подключен ли OrganizationServiceProxy?

/* Tries to connect to CRM and return false if failure - credentials arguments */ 
public bool Connect(string username, string password, string uri) 
{ 
    try 
    { 
     var cred = new ClientCredentials(); 
     cred.UserName.UserName = username; 
     cred.UserName.Password = password; 
     service = new OrganizationServiceProxy(new Uri(uri), null, cred, null); 
     service.EnableProxyTypes(); // Allow LINQ early bound queries 
     linq = new Context(service); 
     /* This is where I need help */ 
     var e = linq.AccountSet.GetEnumerator(); // this fails if not connected 
    } 
    catch 
    { 
     return false; 
    } 
    return true;   
} 


Сервис и Linq частные поля.
Контекст - это serviceContextName в файле crmsvcutil.exe.
У меня есть привычка использовать имя «linq» для объекта Context.

Должен быть лучший способ.

+0

Что вы хотите это сделать, чтобы? Он не будет пытаться подключиться, пока вы не попытаетесь что-то сделать. Как это должно знать, связано ли это или нет? – Daryl

+0

Я хочу, чтобы метод инициализировал поля службы и linq и возвращал false справа, если соединение не удалось. Другой метод использует service.Execute (ExecuteMultipleRequest). Должен ли я перестать проверять, удалось ли соединение, пока я не воспользуюсь service.Execute()? – Bvrce

+1

Вместо вызова GetEnumerator() вы можете просто вызвать вызов GetFirstOrDefault, чтобы проверить, что он работает? – Daryl

ответ

2

Самый простой способ - выполнить WhoAmIRequest, потому что, когда вы подключаетесь к CRM, вам необходимо предоставить действительные учетные данные.

Если учетные данные верны, то WhoAmIRequest вернет текущий GUID пользователя, если они неверны, запрос не удастся.

Так что ваш код может быть:

public bool Connect(string username, string password, string uri) 
{ 
    try 
    { 
     var cred = new ClientCredentials(); 
     cred.UserName.UserName = username; 
     cred.UserName.Password = password; 
     service = new OrganizationServiceProxy(new Uri(uri), null, cred, null); 
     WhoAmIRequest request = new WhoAmIRequest(); 
     WhoAmIResponse response = (WhoAmIResponse)service.Execute(request); 
     Guid userId = response.UserId; 
    } 
    catch 
    { 
     return false; 
    } 
    return true;   
} 
+0

Если пароль неверен, появляется диалоговое окно с запросом учетных данных. Можно ли это остановить? – Bvrce

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