Несанкционированный в Dynamics CRM - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь получить список контактов из CRM 4.0, но у меня проблемы с аутентификацией.Из того, что я прочитал, метод перечисления всех клинетов состоит в том, чтобы проанализировать XML, возвращенный из ExportAllXmlRequest

Проблема заключается в том, что при переходе к http://crmserver/MSCRMServices/2007/spla/CRMDiscoveryService.asmx, я получаю 401.2 неавторизованным и без запросааутентифицировать.Если я добавлю веб-ссылку через визуальную студию, я получу запрос пароля, который не принимает мои учетные данные.Я также попытался выполнить аутентификацию в коде с помощью следующего, но ни одна из них не работает.Проверка подлинности Windows и анонимная проверка подлинности включены на сервере.

CrmService svc = new CrmService();
// this doesn't work
svc.UseDefaultCredentials = true;

// this doesn't work either
svc.Credentials = new NetworkCredential("myuser", "password", "mydomain");
svc.Credentials= System.Net.CredentialCache.DefaultCredentials;
ExportAllXmlRequest request = new ExportAllXmlRequest();

ExportAllXmlResponse response = (ExportAllXmlResponse)svc.Execute(request);
string resp=string.Empty;
using (StreamReader reader = new StreamReader(response.ExportXml)) {
    resp = reader.ReadToEnd();
}
return resp;

Есть ли 1) Более простой способ перечисления контактов из CRM и 2) что-то, что я могу сделать, чтобы решить эту проблему проверки подлинности.

Ответы [ 3 ]

2 голосов
/ 10 мая 2011

Ваш код неверен.Вы смешиваете Сервис метаданных и CRM Сервис .

Для взаимодействия с данными CRM следует использовать Служба CRM . Служба обнаружения - это что-то вроде желтых страниц для развертывания CRM.

// Set up the CRM Service.
var token = new CrmAuthenticationToken();
token.AuthenticationType = 0; 
token.OrganizationName = "{yourorgname}";

var service = new CrmService();
service.Url = "http://<servername>:<port>/mscrmservices/2007/crmservice.asmx";
service.CrmAuthenticationTokenValue = token;
service.Credentials = System.Net.CredentialCache.DefaultCredentials;

Это создает соединение со службой CRM.Для извлечения данных вы можете использовать метод RetrieveMultiple CrmService.

 // Create the QueryExpression object.
 var query = new QueryExpression();

 // Set the properties of the QueryExpression object.
 query.EntityName = EntityName.contact.ToString();
 query.ColumnSet = new AllColumns();

 // Retrieve the contacts.
 BusinessEntityCollection contacts = service.RetrieveMultiple(query);
1 голос
/ 06 мая 2011

Это определенно не тот способ, которым вам нужно получать записи сущностей. ExportAllXmlRequest будет извлекать информацию о настройках для вашей среды CRM, но не будет иметь реальных записей. Вам понадобится RetrieveMultipleRequest (ссылка SDK: http://msdn.microsoft.com/en-us/library/bb929303.aspx).

Что касается проблемы аутентификации, входит ли ваш сайт CRM в список доверенных сайтов или сайтов интрасети в IE?

0 голосов
/ 29 мая 2011

Ответ ckeller выше хорош, если вы работаете в плагине или в версии CRM Online, где у вас нет доступа к базовой базе данных SQL. Если это происходит при локальной установке, и у вас есть доступ SQL-сервера к таблицам CRM, часто быстрее и проще запросить таблицы или представления SQL напрямую для чтения информации об объектах. Вам просто нужно выполнить следующий запрос SQL и прочитать результаты с помощью средства чтения данных SQL или с возможностью обработки данных -

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