это трасировка ошибки
Im, использующий Visual Studio 2010 Ultimate, Project – С# MVC3 Razor
У меня есть проект, который работает без каких-либо проблем на локальной машине, используя базу данных MySql (из онлайн-сервера) просто отлично, но когда я ее загружаю и когда она попадает в ту часть, где нужно получать данные с сервера MySql, она дает мне эта ошибка:
Не удалось найти запрошенный поставщик данных .Net Framework. Это может не быть установленным.
Это моя строка подключения из Web.config для MySql, так как это нормально работает, когда я отлаживаю проект локально. Читает информацию из таблиц и показывает на странице.
<add name="istakipDBContext"
connectionString="Server=xxx.xxx.xxx.xxx; Database=xxx; Uid=xxx;
Pwd=xxx;" providerName="MySql.Data.MySqlClient" />
И это целая трассировка стека:
Ошибка сервера в приложении “/”. Не удалось найти запрошенную .Net Поставщик данных каркаса. Он не может быть установлен. Описание: необработанное исключение произошло во время выполнения текущей сети запрос. Просмотрите трассировку стека для получения дополнительной информации о и где он возник в коде.
Сведения об исключении: System.ArgumentException: невозможно найти запрошенный поставщик данных .Net Framework. Он не может быть установлен.
Необработанное исключение было создано во время выполнения текущий веб-запрос. Информация о происхождении и местонахождении исключение может быть идентифицировано с использованием трассы стека исключений ниже.
Информация о версии: Microsoft.NET Framework Версия: 4.0.30319; Версия ASP.NET: 4.0.30319.272
Поставщик должен быть зарегистрирован в одном из файлов иерархической конфигурации. Например, у меня есть провайдер oracle, зарегистрированный в файле machine.config(который, кажется, выполняется автоматически, когда я установил odac с установщиком установки).
Мой machine.config выглядит следующим образом:
<system.data>
<DbProviderFactories>
<add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
Будьте осторожны, потому что в приложениях Asp.Net есть еще один файл cofig в иерархии, называемый aslo web.config. Он находится в той же папке, что и machine.config. В этой ссылке объясняется иерархия конфигурации Asp.Net: msdn
Если поставщик не зарегистрирован в одном из этих файлов, генерируется сообщение об ошибке. В этом случае я считаю, что лучший способ решить эту проблему – добавить конфигурацию прямо в файл asp.net aplication web.config. что-то вроде этого:
<system.data>
<DbProviderFactories>
<remove invariant="Oracle.DataAccess.Client" />
<add name="Oracle Data Provider for .NET"
invariant="Oracle.DataAccess.Client"
description="Oracle Data Provider for .NET"
type="Oracle.DataAccess.Client.OracleClientFactory,
Oracle.DataAccess,
Version=2.111.7.20,
Culture=neutral,
PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>
Ошибка ясна, он не может найти поставщика данных MySQL
Если вы развернули на ваш производственный сервер, возможно, вы не развернули компонент MySQL, убедитесь, что вы развернули dll MySQL в папку bin вашего приложения.
Общей проблемой является наличие компонента, установленного в GAC, в изолированной среде разработки, и они отсутствуют на рабочем сервере, проверьте, находится ли dll в GAC:
Глобальный кэш сборок (GAC) расположен в: %windir%\assembly
Вы можете заставить ссылки из вашего проекта быть развернуты на производственный сервер, выбрав свойство copy always для сборки в true, однако, если оно настроено на разрешение ссылки из GAC, тогда лучше установить компонент в GAC в производственной коробке:
Это шаги для установки поставщика данных MySQL в GAC
Запустите следующую команду для регистрации поставщика данных MySQL в GAC (таким образом, версия вашего поставщика данных MySQL будет установлена глобально для всех приложений на сервере)
“C:\Program Files (x86)\Microsoft SDK\Windows\v7.0A\Bin\gacutil.exe” /i MySql.Data.dll
Скопируйте dll
MySql.Data.dll
в каталог bin вашего приложения
Для этой конкретной ошибки в Microsoft Visual Studio Professional 2012 просто проверьте имя Provider:
<providerName="System.Data.SqlClient"/>
Имеется Web API приложение использующее сервер баз данных MySQL. На девелоперской машине работает прекрасно. Перенёс приложение на сервер и после обращения к странице вылетает исключение:
{
ClassName: "System.ArgumentException",
Message: "Указанный поставщик хранилища не найден в конфигурации или недопустим.",
Data: null,
InnerException: - {
ClassName: "System.ArgumentException",
Message: "Не удалось найти запрошенного поставщика данных .Net Framework. Возможно он не установлен.",
Data: null,
InnerException: null,
HelpURL: null,
StackTraceString: " в System.Data.EntityClient.EntityConnection.GetFactory(String providerString)",
RemoteStackTraceString: null,
RemoteStackIndex: 0,
ExceptionMethod: "8 GetFactory System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Data.EntityClient.EntityConnection System.Data.Common.DbProviderFactory GetFactory(System.String)",
HResult: -2147024809,
Source: "System.Data.Entity",
WatsonBuckets: null,
ParamName: null
},
HelpURL: null,
StackTraceString: " в System.Data.EntityClient.EntityConnection.GetFactory(String providerString) в System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString) в System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) в System.Data.Entity.Internal.LazyInternalConnection.Initialize() в System.Data.Entity.Internal.LazyInternalConnection.CreateObjectContextFromConnectionModel() в System.Data.Entity.Internal.LazyInternalContext.InitializeContext() в System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) в System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() в System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() в System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() в System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate) в MMSBDWebApplication.Models.UserModel.Login(String login, String password) в MMSBDWebApplication.Controllers.v1.UserController.Test()",
RemoteStackTraceString: null,
RemoteStackIndex: 0,
ExceptionMethod: "8 GetFactory System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Data.EntityClient.EntityConnection System.Data.Common.DbProviderFactory GetFactory(System.String)",
HResult: -2147024809,
Source: "System.Data.Entity",
WatsonBuckets: null,
ParamName: null
}
<?xml version="1.0"?>
<!--
Дополнительные сведения о настройке приложения ASP.NET см. по адресу:
http://go.microsoft.com/fwlink/?LinkId=301879
-->
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<appSettings>
<add key="webpages:Version" value="3.0.0.0"/>
<add key="webpages:Enabled" value="false"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
<!--
Описание изменений web.config см. по адресу http://go.microsoft.com/fwlink/?LinkId=235367.
Следующие атрибуты можно установить с помощью тега <httpRuntime>.
<system.Web>
<httpRuntime targetFramework="4.5" />
</system.Web>
-->
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime/>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
<system.webServer>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed"/>
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0"/>
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="mmsbdEntities" connectionString="metadata=res://*/Models.DatabaseModel.DatabaseEntityModel.csdl|res://*/Models.DatabaseModel.DatabaseEntityModel.ssdl|res://*/Models.DatabaseModel.DatabaseEntityModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;user id=root;password=databaseserv0403!;persistsecurityinfo=True;database=mmsbd"" providerName="System.Data.EntityClient"/>
</connectionStrings>
</configuration>
Структура файлов полностью идентичны, как на сервере так и на девелоперской машине. Все библиотеки на месте. В чём может быть еще проблема?