Сбой входа в AspNetIdentity в Azure - формат строки инициализации не соответствует спецификации, начиная с индекса 0 - PullRequest
0 голосов
/ 15 апреля 2019

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ : Даже если раньше об этой ошибке говорили во многих темах, я не нашел ответа на свой вопрос; Пожалуйста, не стесняйтесь ответить на него, прежде чем пометить как дубликат, потому что это не дубликат: -)

<ч />

Я использую Identity Framework в первом проекте базы данных ASP.NET MVC5.

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

Когда я тестирую свое решение со всеми новыми изменениями в localhost, все отлично работает, включая логин .

Затем я опубликовал свой код и изменения БД в своей среде PreProd, размещенной в Azure (для записи)

Новые изменения в порядке, однако, когда я пытаюсь войти в свой проект, он терпит неудачу, и в моих журналах появляется следующая ошибка:

Формат строки инициализации не соответствует спецификации, начиная с индекса 0.

Проблема возникает в Login метод HttpPost, только при вызове UserManager

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    try
    {
        //Just to proove I can access to my DB
        var businessLayer = new businessLayer();
        var dataFromDB = businessLayer.GetDataFromMyDB();
        logger.Info(dataFromDB ); //dataFromDB is the expected value from my DB

        logger.Info("Will call UserManager");
        var user = await UserManager.FindByEmailAsync(model.Email.Trim());  // <- Fails here in PreProd only
        logger.Info(I never go here (in PreProd only)");
    }
    catch(Exception ex)
    {
         //Fails here in PreProd only with above error message
         logger.Error(ex, ex.Message);
    }
}

В localhost все нормально, в preprod (размещенном в Azure) происходит сбой при вызове UserManager.FindByEmailAsync

Вот моя ConnectionString в localhost

<add name="MyEntities" connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MY-PC\SQLEXPRESS;initial catalog=MyDBName3;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Вот моя ConnectionString для Azure Preprod

<add name="MyEntities" connectionString="metadata=res://*/MyDataModel.csdl|res://*/MyDataModel.ssdl|res://*/MyDataModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=tcp:xxxazure.database.windows.net,1433;Initial Catalog=MyDbName;Persist Security Info=False;User ID=MyUserID;Password=MyPassword;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Когда я использую строку подключения PreProd из VisualStudio в режиме Release, проблем нет вообще, и я могу войти (?!?!) Так что, похоже, проблема в самой среде PreProd, не так ли?

Что я пробовал до сих пор:

  • Скопируйте / вставьте строку подключения в web.config прямо в мой FTP
  • Попробуйте изменить &quot; на '
  • Попробуйте удалить все в строке подключения, кроме обязательных элементов (идентификатор пользователя, пароль ..)
  • Google моя проблема , нажмите на каждую ссылку на первой странице, но все еще есть моя проблема
  • Произвольно изменить Integrated Security и другое значение bool в строке подключения
  • Повернись 7 раз на моем стуле, шепча заклинание вуду

Может кто-нибудь сказать мне:

  • Почему происходит сбой только в PreProd при размещении в Azure
  • Как я могу это исправить?

Большое спасибо

1 Ответ

0 голосов
/ 16 апреля 2019

Всего несколько вещей, чтобы попробовать:

Если в вашем коде есть строка подключения, как показано ниже

<add name="Entities" connectionString="metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX&quot;" providerName="System.Data.EntityClient" />

Добавьте это на портале Azure в настройках приложения:

Name Column => Entities

Value Column => metadata=res://*/TestDB.csdl|res://*/TestDB.ssdl|res://*/TestDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=XXXXXXXX.database.windows.net,1433;Initial Catalog=YourDB;User ID=YourUser;Password=XXXXXX" 

"Custom" - In the drop selection box

enter image description here

Пожалуйста, не забудьте изменить "на" на портале Azure.

Чтобы преобразовать "обычную" строку подключения в строку, принятую EF:

1) Тип строки подключения в настройках приложения должен быть «другое», а не «SQL Azure»

2) Значение строки подключения автоматически заменяет все, что публикуется в web.config

Попробуйте эти варианты и посмотрите, работает ли он.

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