Ошибка: формат строки инициализации не соответствует спецификации, начиная с индекса 0. при попытке вызвать приложение-функцию - PullRequest
0 голосов
/ 14 июля 2020

Я тестирую свою развернутую функцию Azure и получаю следующую ошибку. Моя функция запускается локально при подключении к базе данных Azure, но не работает при ее развертывании и запуске. Я настроил параметры приложения для чтения секретного URL-адреса в строке подключения.

enter image description here

This is how my connectionstring looks like

Server=tcp:ranjitazuredb.database.windows.net,1433;Initial Catalog=Srl;Persist Security Info=False;User ID=usr;Password=pwd;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

Application setting - Url to the secret

https://srlcustomermanagervault.vault.azure.net/secrets/ConnectionString

Function

public  class GetCustomersOrders
    {
        private readonly ICustomerOrdersRepository _repo;
        private readonly IMapper _mapper;
        private readonly TelemetryClient _telemetryClient;


        public GetCustomersOrders(ICustomerOrdersRepository repo, IMapper mapper, TelemetryConfiguration configuration)
        {
            _repo = repo;
            _mapper = mapper;
            _telemetryClient = new TelemetryClient(configuration);
        }

        [FunctionName("GetCustomersOrders")]
        public async Task Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = "customer-orders")] HttpRequest req,
            ILogger log)
        {
            this._telemetryClient.TrackTrace("C# HTTP trigger function processed a request.");
            var customersOrders = _repo.GetCustomerOrders();
            return new OkObjectResult(_mapper.Map>(customersOrders));
        }
    }

This is how I have assigned the policy

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

Запуск функции

[assembly: FunctionsStartup(typeof(Startup))]
namespace SRL.CustomerOrder
{
    internal class Startup : FunctionsStartup
    {
      
        public override void Configure(IFunctionsHostBuilder builder)
        {
           
                var connectionString = Environment.GetEnvironmentVariable("ConnectionString");

                builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());
                builder.Services.AddScoped<ISrlContext, CustomerManagerContext>();
                builder.Services.AddAutoMapper(typeof(Startup));

                builder.Services.AddDbContext<CustomerManagerContext>(options =>
                   options.UseSqlServer(connectionString));

                builder.Services.AddTransient<ICustomerDetailsRepository, CustomerDetailsRepository>();
                builder.Services.AddTransient<ICustomerOrdersRepository, CustomerOrdersRepository>();
                builder.Services.AddTransient<IOrderDetailsRepository, OrderDetailsRepository>();

        }

    }
}

1 Ответ

0 голосов
/ 15 июля 2020

Предполагая, что строка подключения работала, когда вы использовали ее непосредственно в настройках приложения, я бы проверил эту ссылку https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

Итак, в вашем примере вы должны использовать

@Microsoft.KeyVault (SecretUri = https://srlcustomermanagervault.vault.azure.net/secrets/ConnectionString)

В документации говорится, что вам нужен идентификатор версии, а вам его нет (это ошибка, которая работает). Azure работает над выпуском, так что он работает без версии, которая, вероятно, должна выйти в предварительную версию сейчас, а если не в ближайшее время. Я поговорил с несколькими людьми, и он работает для клиента без версии.

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