OrganizationWebProxyClient — конечная точка = адрес=ошибка CS0103: Имя ‘_address’ не существует в текущем контексте, ClientCredentials

#c# #authentication #azure-functions #dynamics-crm #access-token

#c# #аутентификацию #azure-функции #dynamics-crm #токен доступа

Вопрос:

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

В моем коде нет ничего, что имело бы отношение к «_address». Я думал, что сообщение об ошибке относится к моему URL.

Конечная точка = Адрес= ошибка CS0103: имя ‘_address’ не существует в текущем контексте, ClientCredentials = {System.ServiceModel.Описание.ClientCredentials}

         var clientId = "YOUR_CLIENT_ID";
        var clientSecret = "YOUR_CLIENT_SECRET";
        var organizationUrl = "YOUR_ORGANIZATION_URL";
        var tenantId = "YOUR_TENANT_ID";

        //this specific scope means that application will default to what is defined in the application registration rather than using dynamic scopes
        List<string> scopes = new List<string>();
        scopes.Add("https://graph.microsoft.com/.default");

        var cca = ConfidentialClientApplicationBuilder.Create(clientId)
                                          .WithAuthority(authority)
                                          .WithRedirectUri(organizationUrl)
                                          .WithClientSecret(clientSecret)
                                          .Build();

        // Retrieve an access token for Microsoft Graph (gets a fresh token if needed).
        var authResult = cca
             .AcquireTokenForClient(scopes)
             .ExecuteAsync();

        var tokenKey = authResult.Result.AccessToken;

        OrganizationWebProxyClient sdkService = null;
        try
        {
            //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            sdkService = new OrganizationWebProxyClient(GetServiceUrl(organizationUrl), new TimeSpan(0, 10, 0), false);

            sdkService.HeaderToken = tokenKey;
        }
        catch (Exception ex)
        {
            log.LogInformation("There is issue while generating the token "   ex.Message);
        }

        return sdkService
  

введите описание изображения здесь

Ответ №1:

При сбое, если я проверяю значения свойств клиента («sdkService») перед вызовом операционного контракта (веб-метод), это переводит клиент в состояние сбоя, а затем вызов завершается ошибкой.

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

Комментарии:

1. это странное решение, но оно работает! Спасибо!

2. Похоже на квантовую механику… оно ломается, только если вы посмотрите на него.

Ответ №2:

Вы увидите эту ошибку при попытке использовать текущий CRM / CDS / DV SDK с .NET Core по сравнению с .NET Framework, поскольку это несовместимо. Используйте фреймворк или альфа-версию SDK отhttps://github.com/microsoft/PowerPlatform-CdsServiceClient который совместим с ядром.