Настройка сайта MVC3 на mod-mono, теперь получаются исключения при выполнении кода
Давайте посмотрим, может ли кто-нибудь здесь помочь с проблемой развертывания сайта MVC3 на apache с использованием mod_mono.
Моя моно-установка - 3.10.1 (точно так же происходит и с 3.10.0), последняя версия - mod_mono и xsp. Я установил моно из источника, который я получил из ветки git.
Проблема - исключение, которое я получаю при попытке аутентификации пользователя. Исключение происходит, когда я звоню Membership.Validate и это:
System.InvalidOperationException
Failed to map path '/'
at System.Web.HttpRequest.MapPath (System.String virtualPath, System.String baseVirtualDir, Boolean allowCrossAppMapping) [0x001a4] in /usr/local/src/mono/mcs/class/System.Web/System.Web/HttpRequest.cs:1563
at System.Web.HttpRequest.MapPath (System.String virtualPath) [0x0000d] in /usr/local/src/mono/mcs/class/System.Web/System.Web/HttpRequest.cs:1520
at System.Web.Hosting.HostingEnvironment.MapPath (System.String virtualPath) [0x00042] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Hosting/HostingEnvironment.cs:156
at System.Web.Hosting.DefaultVirtualPathProvider.DirectoryExists (System.String virtualDir) [0x00016] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Hosting/DefaultVirtualPathProvider.cs:59
at System.Web.Configuration.WebConfigurationManager.FindWebConfig (System.String path, System.Boolean& inAnotherApp) [0x0001a] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/WebConfigurationManager.cs:592
at System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration (System.String path, System.String site, System.String locationSubPath, System.String server, System.String userName, System.String password, Boolean fweb) [0x00026] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/WebConfigurationManager.cs:360
at System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path, System.Web.HttpContext context) [0x0000d] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/WebConfigurationManager.cs:456
at System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path) [0x00000] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/WebConfigurationManager.cs:435
at System.Web.Security.SqliteMembershipProvider.Initialize (System.String name, System.Collections.Specialized.NameValueCollection config) [0x0028b] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Security/SqliteMembershipProvider.cs:143
at System.Web.Configuration.ProvidersHelper.InstantiateProvider (System.Configuration.ProviderSettings providerSettings, System.Type providerType) [0x00069] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/ProvidersHelper.cs:61
at System.Web.Configuration.ProvidersHelper.InstantiateProviders (System.Configuration.ProviderSettingsCollection configProviders, System.Configuration.Provider.ProviderCollection providers, System.Type providerType) [0x0003e] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Configuration_2.0/ProvidersHelper.cs:72
at System.Web.Security.Membership..cctor () [0x0001a] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Security/Membership.cs:107
Я пробовал сайт, который использует пользовательский поставщик членства, и другой сайт, который использует по умолчанию, оба отображают ту же проблему. Я пробовал это на 2 разных серверах, на моно 3.10.1 и 3.10.0.
Я настроил сайт с помощью инструмента автоматической настройки: http://go-mono.com/config-mod-mono/ и использовал конфигурацию по умолчанию, которую он дал следующим образом:
Alias /boacommander "/var/www/html/boacommander"
MonoServerPath boacommander "/usr/bin/mod-mono-server4"
MonoDebug boacommander true
MonoSetEnv boacommander MONO_IOMAP=all
MonoApplications boacommander "/boacommander:/var/www/html/boacommander"
<Location "/boacommander">
Allow from all
Order allow,deny
MonoSetServerAlias boacommander
SetHandler mono
SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary
</Location>
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript
</IfModule>
Следующие dll скопированы вдоль сайта:
- EntityFramework.dll
- Microsoft.Web.Infrastructure.dll
- MVC3.dll
- System.Web.Helpers.dll
- System.Web.Mvc.dll
- System.Web.Razor.dll
- System.Web.Services.dll
- System.Web.WebPages.Deployment.dll
- System.Web.WebPages.dll
- System.Web.WebPages.Razor.dll
Исключение происходит в System.Web, поэтому, если я скопирую System.Web.dll, я получу это исключение еще до того, как попаду на страницу входа:
Could not find method 'Void SetHostingEnvironment()' in type 'System.Web.Hosting.ApplicationHost'
at (wrapper xdomain-invoke) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate)
at (wrapper remoting-invoke-with-check) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate)
at System.Web.Hosting.ApplicationHost.CreateApplicationHost (System.Type hostType, System.String virtualDir, System.String physicalDir) [0x002fb] in /usr/local/src/mono/mcs/class/System.Web/System.Web.Hosting/ApplicationHost.cs:241
at Mono.WebServer.VPathToHost.CreateHost (Mono.WebServer.ApplicationServer server, Mono.WebServer.WebSource webSource) [0x00048] in /usr/local/src/xsp/src/Mono.WebServer/VPathToHost.cs:143
at Mono.WebServer.Apache.Server.RealMain (System.String[] args, Boolean root, IApplicationHost ext_apphost, Boolean v_quiet) [0x00277] in /usr/local/src/xsp/src/Mono.WebServer.Apache/main.cs:161
at (wrapper remoting-invoke-with-check) Mono.WebServer.Apache.Server:RealMain (string[],bool,Mono.WebServer.IApplicationHost,bool)
at Mono.WebServer.Apache.Server.Main (System.String[] args) [0x00034] in /usr/local/src/xsp/src/Mono.WebServer.Apache/main.cs:58
[ERROR] FATAL UNHANDLED EXCEPTION: System.Runtime.Serialization.SerializationException: Could not find method 'Void SetHostingEnvironment()' in type 'System.Web.Hosting.ApplicationHost'
Server stack trace:
at System.Reflection.MemberInfoSerializationHolder.GetRealObject (StreamingContext context) [0x00215] in /usr/local/src/mono/mcs/class/corlib/System.Reflection/MemberInfoSerializationHolder.cs:158
at System.Runtime.Serialization.ObjectRecord.LoadData (System.Runtime.Serialization.ObjectManager manager, ISurrogateSelector selector, StreamingContext context) [0x00133] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization/ObjectManager.cs:596
at System.Runtime.Serialization.ObjectManager.DoFixups () [0x00074] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization/ObjectManager.cs:85
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadNextObject (System.IO.BinaryReader reader) [0x0000f] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:141
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.ReadObjectGraph (BinaryElement elem, System.IO.BinaryReader reader, Boolean readHeaders, System.Object& result, System.Runtime.Remoting.Messaging.Header[]& headers) [0x0004d] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/ObjectReader.cs:107
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.NoCheckDeserialize (System.IO.Stream serializationStream, System.Runtime.Remoting.Messaging.HeaderHandler handler) [0x0007a] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:177
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (System.IO.Stream serializationStream) [0x00000] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Serialization.Formatters.Binary/BinaryFormatter.cs:134
at System.Runtime.Remoting.RemotingServices.DeserializeCallData (System.Byte[] array) [0x0000f] in /usr/local/src/mono/mcs/class/corlib/System.Runtime.Remoting/RemotingServices.cs:794
at (wrapper xdomain-dispatch) System.AppDomain:DoCallBack (object,byte[]&,byte[]&)
Будь я проклят, если ты это сделаешь, будь ты проклят, если нет, так что я могу сделать, чтобы решить эту проблему?
РЕДАКТИРОВАТЬ с дополнительной информацией: то же самое происходит при использовании mono 3.12.0 (git branch)