Dynamics365 CRM - Невозможно войти в Dynamics CRM - PullRequest
1 голос
/ 21 марта 2019

Я работал над проектом в течение последних 5 месяцев - интегрировал одну из наших старых систем для использования Dynamics365 CRM для хранения и записи потенциальных клиентов для нашего отдела маркетинга и продаж.

В нескольких средах все работает как надо - у нас есть DEV, Sandbox, а также TEST и мой локальный компьютер.Он работает везде, кроме сервера UAT, который находится в совершенно другом городе, в отличие от других, находящихся в здании, в котором мы работаем.

Мы убедились, что используется TSL 1.2, и приложение вызывает это в коде.По сравнению с функциями .NET на всех машинах они одинаковы, шифры и файлы конфигурации практически одинаковы, различия незначительны, например, строки подключения для наших баз данных.

Мы подключаемся к одному и тому же экземпляру CRM во всех средах.

Проект был скомпилирован с использованием .NET 4.6.1

Microsoft.CrmSdk.CoreAssemblies - 9.0.2.4

Microsoft.CrmSdk.XrmTooling.CoreAssembly - 9.0.2.7

Microsoft.IdentityModel.Clients.ActiveDirectory - 2.22.302111727

Наш Azure (мы используем AD для входа в CRM через C #) не имеет белого списка.

Насколько нам известно, динамика не имеет белого списка.

Нет правила брандмауэра, которое блокирует любые исходящие соединения через порт 443, поэтому все напоминает другие среды, но мы получаем " Невозможно войтиto Dynamics CRM"сообщение об ошибке.

Это код, который мы используем для подключения к CRM ..

string Thumbprint = ConfigurationManager.AppSettings["CertThumbprint"];
string adInstance = ConfigurationManager.AppSettings["ADInstance"];
string adTenant = ConfigurationManager.AppSettings["Tenant"];
string Url = ConfigurationManager.AppSettings["Application"];
string AppId = ConfigurationManager.AppSettings["ClientId"];

ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);

certStore.Open(OpenFlags.ReadOnly);


X509Certificate2Collection CertificateCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, Thumbprint, false);

if (CertificateCollection.Count == 0) 
      throw new Exception("Error: Could not find the right certificate.");


X509Certificate2 AzureCertificate = CertificateCollection[0];


CrmServiceClient.AuthOverrideHook = new AuthHook(adInstance, adTenant, Url, AppId, AzureCertificate);

var crmSvc = new CrmServiceClient(new Uri(Url), true);

if (crmSvc == null || !crmSvc.IsReady) throw new Exception(crmSvc == null ? "CrmServiceClient Failure." : crmSvc.LastCrmException.ToString());

this.service = (IOrganizationService)crmSvc.OrganizationWebProxyClient ?? crmSvc.OrganizationServiceProxy;

Эта строка специально возвращает ошибку и также имеет значение null...

var crmSvc = new CrmServiceClient(new Uri(Url), true);

Стоит отметить, что единственная разница между UAT по сравнению с остальными заключается в том, что UAT работает на .NET 4.7.1 по сравнению с другими, на которых работает .NET 4.7.2.

Если кто-нибудь сталкивался с этим, он был бы очень признателен или поделился идеями, что это может быть.помогло.Та же ошибка ... этот метод работал в любой другой среде.

Используемый код:

ClientCredentials clientCredentials = new ClientCredentials();

if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["crm_user"]) && 
    !string.IsNullOrEmpty(ConfigurationManager.AppSettings["crm_password"]))
{
    clientCredentials.UserName.UserName = ConfigurationManager.AppSettings["crm_user"];
    clientCredentials.UserName.Password = ConfigurationManager.AppSettings["crm_password"];

    ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

    this.service = (IOrganizationService)new OrganizationServiceProxy(new Uri(ConfigurationManager.AppSettings["crm_org_url"]),
                                        null, clientCredentials, null);

    if (this.service == null)
    {
        Exception e = new Exception("CRM: Could not login to organization service proxy.");

        throw e;
    }
}
else
{
    throw new Exception("CRM: Could not connect using a fallback method. The web configuration doesn't contain crm_user or crm_password keys.");
}

1 Ответ

1 голос
/ 26 марта 2019

Прежде всего, спасибо всем, кто пытался помочь.

Решение этой (3 дня) проблемы состояло в том, что мой закрытый ключ, который был установлен на локальном компьютере, не имел необходимых разрешений длявеб-приложение для чтения.

Я успешно нашел ключ, но код не смог его прочитать.

Чтобы решить эту проблему, я обратился в MMC, добавил сертифицированный на мой взгляд,затем в личной папке у меня есть свои сертификаты, щелкните правой кнопкой мыши по нужному, Все задачи> Управление личными ключами и убедитесь, что у вас есть пул приложений в разделе Имя группы или пользователя.

Стоит добавить, что я также добавил IIS_IUSRSСгруппируйте вдоль моего пула приложений (App Pools \ DefautApplicationPool).

Это волшебным образом решило проблему UAT.CRM SDK может быть улучшен, чтобы быть ... более интуитивным.

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