2015-04-23 2 views
1

Я представил с этой ошибкой:Идентичность проверка Роль работает на местном уровне, но не на развернутых экземпляров - Entity Framework с Owin

Server Error in '/' Application. 
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found  or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections.   (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)  
Description: An unhandled exception occurred during the execution of the current web req uest. Please review the stack trace  for more information about the error and where it originated in the code.  

SQLExpress database file auto-creation error: 

The connection string specifies a local Sql Server Express instance using a database location within the application's  App_Data directory. The provider attempted to automatically create the application services database because the provid er  determined that the database does not exist. The following configuration requirements are necessary to successfully che ck for  existence of the application services database and automatically create the application services database:  

If the application is running on either Windows 7 or Windows Server 2008R2, special configuration steps are necessary to  enable automatic creation of the provider database. Additional information is available at: http://go.microsoft. com/fwlink/?LinkId=160102. If the application's App_Data directory does not already exist, the web server accoun t must have  read and write access to the application's directory. This is necessary because the web server account will auto matically  create the App_Data directory if it does not already exist.  
If the application's App_Data directory already exists, the  web server account only requires read and write access to the  application's App_Data directory. This is necessary because  the web server account will attempt to verify that the Sql Ser ver  Express database already exists within the application's Ap p_Data directory. Revoking read access on the App_Data director y  from the web server account will prevent the provider from  correctly determining if the Sql Server Express database alread y  exists. This will cause an error when the provider attempts  to create a duplicate of an already existing database. Write  access is required because the web server account's credent ials are used when creating the new database.  
Sql Server Express must be installed on the machine.  
The process identity for the web server account must have a local user profile. See the readme document for details on how to  create a local user profile for both machine and domain accounts. 

Это исключение, когда я называю этот метод расширения на пользователя:

public static bool IsInAnyRole(this IPrincipal principal, params string[] roles) 
{ 
    return roles.Any(principal.IsInRole); 
} 

Вещь, этот метод расширения отлично работает на моей локальной машине. Это только при развертывании (удаленный сервер и Azure - я пробовал оба), что это не удается.

Исключение указывает, что оно не может подключиться к SQL Express, но я не должен использовать SQL Express вообще. Моя единственная строка подключения указывает на SQL Server.

Я пробовал базу данных SQL удаленного сервера и экземпляр Azure SQL; выдается одно и то же исключение.

Я также пытался обеспечить соответствие всех соответствующих ссылок Copy Local = true.

Я и мои товарищи полностью в тупике. Есть идеи?

Update:

Я считаю, что я отслеживали его сводится к тому, что Entity Framework не является, в какой-то момент, создавая и опираясь на экземпляр LocalDB, несмотря на то, что нигде в моей конфигурации или в любом месте Я могу найти такую ​​конфигурацию. Возможно ли, что это может быть сделано автоматически?

ответ

1

Хорошо! Догадаться.

Проблема была в частности с Role Manager. Эта функция включена с помощью следующей web.config строки:

<roleManager enabled="true" /> 

Однако - выше декларация, сама по себе, не объявляет строку подключения. Можно было бы подумать, что по умолчанию будет использоваться строка DefaultConnection, расположенная вверху web.config, но это не так - она ​​использует все, что есть в machine.config. В моем случае это был LocalDB/SQL Express.

Чтобы исправить это, я сделал две вещи:

Installed провайдеров Microsoft сеть САШ пакет NuGet, который получает все различные провайдеры идентичности (пользователи, роли и т.д.) и уравнивает их конфигурацию.

Install-Package Microsoft.AspNet.Providers 

Затем я обеспечил узел roleManager был полностью объявлен:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider"> 
    <providers> 
    <clear /> 
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" /> 
    </providers> 
</roleManager> 

А теперь все работает!

+1

Я бы повторил это несколько раз, если бы мог ... после того, как потратил часы на эту проблему, ваше решение сработало для меня. Спасибо миллион за размещение вашего решения! – RizJa