Microsoft.CrmSdk.XrmTooling.CoreAssembly с Targetframework .NET 4.5.2 вызывает исключение NullReference для CrmServiceClient.Execute - PullRequest
0 голосов
/ 09 января 2019

Мы подключаемся к Dynamics 365 CRM с помощью следующего кода в простом консольном приложении, ориентированном на .NET 4.5.2.

 private static void Main(string[] args)
    {
        RetrieveAllEntitiesRequest req2 = new RetrieveAllEntitiesRequest();
        req2.EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Entity;

        CrmServiceClient conn = new CrmServiceClient(
            "svccrm@contoso.com",
            CrmServiceClient.MakeSecureString("secret"),
            "EMEA", "contoso",
            useUniqueInstance: true,
            useSsl: true, isOffice365: true);

        try
        {
            //error with target framework 4.5.2
            var resp2 = conn.Execute(req2) as RetrieveAllEntitiesResponse;
        }
        catch
        {
            string lastError = conn.LastCrmError;
        }
    }

Следующие пакеты nuget находятся в packages.config

<package id="Microsoft.CrmSdk.CoreAssemblies" version="9.0.2.5" targetFramework="net452" />
<package id="Microsoft.CrmSdk.Deployment" version="9.0.2.4" targetFramework="net452" />
<package id="Microsoft.CrmSdk.Workflow" version="9.0.2.4" targetFramework="net452" />
<package id="Microsoft.CrmSdk.XrmTooling.CoreAssembly" version="9.0.2.7" targetFramework="net452" />
<package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.22.302111727" targetFramework="net452" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net452" />

Когда я запускаю этот код, я получаю исключение NullReferenceException в Microsoft.Xrm.Tooling.Connector.CrmServiceClient.Execute (запрос OrganizationRequest) с ошибкой LastCrmError

Невозможно войти в Dynamics CRM ************ Исключение - RetrieveAllEntities: Выполнить (RetrieveAllEntities) запрос к CRM из IOrganizationService | => Ссылка на объект не установлена ​​для экземпляра объекта.

Как только я изменяю целевой Framework на 4.6.2, он работает просто отлично. Дело в том, что мы размещаем этот код в пакете служб интеграции SQL Server, и по какой-то причине в Windows 2016 SSIS всегда возвращается к платформе 4.5.2.

Мы также исследуем это, но на данный момент остается вопрос, должен ли пакет Microsoft.CrmSdk.XrmTooling.CoreAssembly работать с 4.5.2 (readme nuget сообщает yes) или если это ошибка в SDK .

Последние версии .NET 4.7.X были установлены на сервере 2016 года и на моей машине win 10 dev, хотя обе они сталкиваются с одной и той же проблемой.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Начиная с версии 9, Dynamics 365 применяет TLS 1.2 , и потому что .NET 4.5 использует TLS 1.1 по умолчанию, вы получаете эту ошибку. В предыдущей статье вы обнаружите, что решение для клиентских приложений - это то, что вы уже пробовали:

Перекомпилируйте ваши клиентские приложения с использованием .NET Framework 4.6.2 или выше.

Есть несколько статей о том, как применять TLS 1.2 из пакета служб SSIS ( здесь и здесь ), но, к сожалению, я их не пробовал. Если это не помогает, вы можете обойти ошибку, изменив параметр реестра SchUseStrongCrypto на DWORD: 00000001, как описано здесь (Включить TLS 1.2 для зависимых компонентов / Обновить раздел .NET Framework).

0 голосов
/ 09 января 2019

Мне удалось успешно выполнить приведенный выше код, используя 4.5.2.

Проверьте ваш app.config. Добавьте тег ниже и попробуйте.

<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> </startup>

Спасибо

...