2010-10-02 3 views
4

Очевидно, Mono заменяет ссылки на поставщика членства SQL Server с провайдером членства sqlite (см. ASP.NET_Settings_Mapping). Есть ли способ убедить Mono использовать SQL Server для поставщика членства?Моно с поставщиком членства в SQL Server?

Когда я пытаюсь войти в свой веб-приложение, я получаю следующее:

System.Configuration.Provider.ProviderException: Operation aborted due to an exception (see Trace for details). 
at System.Web.Security.SqliteMembershipProvider.ValidateUser (string,string) <0x003bb> 
at DirectMail.Controllers.AccountMembershipService.ValidateUser (string,string) [0x00000] in [file].cs:404 
at DirectMail.Controllers.AccountController.ValidateLogOn (string,string) [0x00040] in [file].cs:346 
at DirectMail.Controllers.AccountController.LogOn (string,string,bool,string) [0x00000] in [file].cs:79 
at (wrapper dynamic-method) System.Runtime.CompilerServices.ExecutionScope.lambda_method (System.Runtime.CompilerServices.ExecutionScope,System.Web.Mvc.ControllerBase,object[]) <0x001c1> 
at System.Web.Mvc.ActionMethodDispatcher.Execute (System.Web.Mvc.ControllerBase,object[]) <0x00028> 
at System.Web.Mvc.ReflectedActionDescriptor.Execute (System.Web.Mvc.ControllerContext,System.Collections.Generic.IDictionary`2<string, object>) <0x0015b> 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod (System.Web.Mvc.ControllerContext,System.Web.Mvc.ActionDescriptor,System.Collections.Generic.IDictionary`2<string, object>) <0x00036> 
at System.Web.Mvc.ControllerActionInvoker/<InvokeActionMethodWithFilters>c__AnonStoreyB.<>m__E() <0x00092> 
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter (System.Web.Mvc.IActionFilter,System.Web.Mvc.ActionExecutingContext,System.Func`1<System.Web.Mvc.ActionExecutedContext>) <0x00125> 

В верхней части файла /usr/local/etc/mono/4.0/settings.map на одной машине Debian Linux является:

<?xml version="1.0" encoding="utf-8" ?> 
<settingsMap> 
    <map sectionType="System.Web.Configuration.MembershipSection, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     mapperType="Mono.Web.Util.MembershipSectionMapper, Mono.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" 
     platform="Unix"> 

    <!-- The 'what' tag specifies which region of the section to modify. The 'value' attribute value is mapper-specific and is not defined here. It can be 
     any expression understood by the mapper to designate the section region to modify. 
    --> 
    <what value="providers"> 
     <!-- 'what' can contain any number of occurrences of any three elements: 
       replace - replace the designated region 
     add - add a new entry to the region 
     clear - clear the region 
     remove - remove the designatedregion 

       The attributes to any of the above are freeform and are not processed by the mapper manager. They are stored verbatim for the 
     mapper to peruse. 
     --> 
     <replace name="AspNetSqlMembershipProvider" 
     type="System.Web.Security.SqliteMembershipProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     connectionStringName="LocalSqliteServer" /> 
    </what> 
    </map> 
<!-- ... --> 
+0

На странице [Настройки ASP.NET Mapping] (http://www.mono-project.com/ASP.NET_Settings_Mapping), что вы связаны в разделе «Запрещение сопоставления настроек» говорится, что добавление '' в элемент 'appSettings' в' 'Web.config 'приложения будет препятствовать карта настроек. Однако я обнаружил, что значение «ничего» не работает. Если я использую значение «true», то это произойдет. –

+0

Похоже, что это может сработать. Не могли бы вы добавить это в качестве ответа, чтобы я мог отметить его правильно, если он работает? –

+0

Я преобразовал комментарий в ответ: [http://stackoverflow.com/questions/3846487/mono-with-sql-server-membership-provider/4853323#4853323](http://stackoverflow.com/questions/3846487/mono-with-sql-server-membership-provider/4853323 # 4853323) –

ответ

3

На ASP.NET Settings Mapping страницы, что вы связаны, в разделе «Ингибирование отображения настроек», он говорит, что добавление:

<appSettings> 
    <add key="MonoAspnetInhibitSettingsMap" value="anything"/> 
</appSettings> 

в Web.config файл вашего приложения будет отключить отображение параметров. Однако я обнаружил, что значение «ничего» не работает. Если я использую значение «истина» вместо этого, то он делает:

<appSettings> 
    <add key="MonoAspnetInhibitSettingsMap" value="true"/> 
</appSettings> 
1

Это должно быть неправильной конфигурацией, поскольку реализованный sqlmembershipprovider существует для Mono 2.0. Для получения соединения используется DBProviderFactory. Реализация SqlClient также существует, так что только приводит к выводу, что web.config для веб-сайта неверен, что немыслимо, потому что sqlclient и sqlite почти одинаковы в переполненном web.config.

Если кто-то может опубликовать этот текст, это может прояснить проблему.

+0

Проект ASP.NET MVC 2, над которым я работаю, который использует 'SqlMembershipProvider', был сгенерирован в Windows с Visual Web Developer 2010. Я запустил проект щелкнув значок «Отладка» в VWD и проверив, что к ним обращается база данных SQL Server. Я скопировал источники на машину Debian Linux, а затем попытался запустить веб-приложение с помощью 'xsp4'. В основном это работало, но при попытке использовать функции поставщика членства произошла ошибка. –

+0

Ваш ответ заставил меня пересмотреть файлы конфигурации системы, и я заметил что-то подозрительное в '/ usr/local/etc/mono/4.0/settings.map' (Mono на машине Debian Linux был скомпилирован из источника). Я добавлю соответствующие части к вопросу. –

+0

Я все еще чувствую, что вы должны ссылаться на SQLProvider из моно. У меня нет хоста debian с моно теперь, но если вы замените SqliteMembershipProvider на SqlMembershipProvider в своей конфигурации и sqliteconnection с sqlconnection, вы должны быть в бизнесе. – rene

Смежные вопросы