У меня есть консольное приложение, которое может удалять и создавать задания в коллекции заданий в Планировщике Azure. Я создал локальный сертификат для создания SchedulerClient и развернул этот сертификат через портал Azure -> Настройки -> Сертификаты управления -> Загрузить.
Я поместил приведенный выше код в запланированное задание в приложении для мобильных служб.
Сначала задание завершилось неудачно, поскольку в нем говорится, что он не может найти сертификат: -
Message = 'Попытка создать запланированное задание «Имя задания» не удалась со следующим сообщением: «Не удалось найти сертификат с отпечатком« xxxx ».'. ', Exception = System.ArgumentException: сертификат с отпечатком« xxxx »не удалось быть расположен. в TechCare.Mobile.Services.JobManager.GetStoreCertificate (отпечаток строки) в TechCare.Mobile.Services.JobManager..ctor () в lambda_method (Closure, Object []) в Autofac.Core.Activators.Reflection.ConstructorParameterBinding () , Id = 6a06732a-1dba-4ce5 -ffe-dee1596877de, Category = 'App.Controllers.Jobs'
Итак, я создал версию сертификата Base64String, на которую затем эта ошибка теперь возвращалась.
Exception = Hyak.Common.CloudException: ForbiddenError: серверу не удалось аутентифицировать запрос. Убедитесь, что сертификат действителен и связан с этой подпиской. в Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи) в Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess (задача задачи) в Microsoft.WindowsAzure.Scheduler.JobOperationsExtensions.List (Параметры IJobOperationCarameters. Services.JobManager.ClearJobCollection () в techcaremobilewebservicesService.ScheduledJobs.dailyRoutines.CreateNotificationSchedule () в techcaremobilewebservicesService.ScheduledJobs.dailyRoutines.ExecuteAsync (), Id = 0000000000-000000000000
Итак, я нашел способ загрузить опубликованный профиль с портала Azure, вытащил из файла строку, составляющую сертификат управления, и попытался это сделать, но это тоже не удалось.
Сообщение = 'Попытка создать запланированное задание «Имя задания» завершилась неудачно со следующим сообщением: «Система не может найти указанный файл. '.', Exception = System.Security.Cryptography.CryptographicException: система не может найти указанный файл.
в System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 hr) в System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (Byte [] rawData, пароль IntPtleCertFromBlob, и пароли System.SecurityCeyCryptographic, пароль для IntPtleCeyCeyCryptographic, пользовательский текст .X509Certificates.X509Certificate.LoadCertificateFromBlob (Byte [] rawData, Object password, X509KeyStorageFlags keyStorageFlags) в System.Security.Cryptography.X509Certificates.X509Certificate.Cryptography.X509Certificates. ), Id = 31dd37b3-53cb-4f8b-8873-6155f25913dd, Category = 'App.Controllers.Jobs'
Затем я нашел несколько флагов, которые было предложено добавить при создании сертификата.
X509KeyStorageFlags flags = X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable;
вернуть новый X509Certificate2 (Convert.FromBase64String (certRaw), string.Empty, flags);
Но тогда и это не удалось.
Message = 'Попытка создать запланированное задание «Имя задания» не удалась, появилось следующее сообщение: «Доступ запрещен. '.', Exception = System.Security.Cryptography.CryptographicException: доступ запрещен.
в System.Security.Cryptography.CryptographicException.ThrowCryptographicException (Int32 hr) в System.Security.Cryptography.X509Certificates.X509Utils._LoadCertFromBlob (Byte [] rawData, пароль IntPtleCertFromBlob, и пароли System.SecurityCryptographic, пароль для пароля IntPterCeyCeyCynt32, dysqlags, пароль .X509Certificates.X509Certificate.LoadCertificateFromBlob (Byte [] rawData, Object password, X509KeyStorageFlags keyStorageFlags) в System.Security.Cryptography.X509Certificates.X509Certificate.Cryptography.X509Certificates.X509Certificate2..bileCertificates.X509CertificateStorageServiceServiceSertificateSertificateSertificate2..bileDataKey50 (байт) JobManager.GetStoreCertificate (отпечаток строки), Id = 07a6329b-f1ec-44b6-8446-12bcf616d336, Category = 'App.Controllers.Jobs'
Я был бы признателен за помощь в решении этой проблемы, так как я потратил больше времени, пытаясь исправить это, чем то, сколько времени заняла фактическая разработка: -S