Ссылка Dblinq в веб-службе ASP.NET на MonoDevelop приводит к сбою xsp2
Я пытаюсь попробовать DBLinq с провайдером sqlite внутри простого веб-сервиса ASP.NET. Я также использую MonoDevelop 2.4 и Mono 2.6.7. Проект в monodevelop ссылается на файл DbLinq.dll, который по умолчанию настроен на локальное копирование. Я могу скомпилировать веб-сервис просто отлично. Когда я пытаюсь запустить его из Monodevelop или использовать xsp2 из командной строки, xsp2 завершается с ошибкой (см. Ниже). Если я снял флажок "Локальное копирование" для ссылки DBLinq.dll, xsp2 выполнится, но часть кода Linq не будет работать. Это также верно для провайдера MySQL. Я думаю, что проблема в том, что когда на DbLinq ссылаются и его локально копируют, он также копирует зависимые сборки, и одна из сборок вызывает засорение xsp2.
Кто-нибудь сталкивался с этим? Как я могу решить проблему или как это обойти? Любая помощь очень ценится. Ниже приведен пример фрагмента метода web service в коде asmx.
[WebMethod]
публичная строка getrecord() {string txt = string.Empty; using( DataContext context = new DataContext("DbLinqProvider=Sqlite; Data Source=openemr.db")) { var addrtbl = context.GetTable<Addresses>(); var addr = from a in addrtbl select a; foreach( var i in addr) { txt += i.City ; txt += "; "; } }
вернуть текст;
}
Конечно, это не может быть хорошим способом реализации доступа к данным, и его необходимо разделить. Но для целей тестирования это должно как минимум сработать.
Вот ошибка, которую я получаю при запуске xsp2. Как я уже говорил выше, одна из зависимых сборок, на которые ссылается и копирует DbLinq локально, вызывает это. Мой вопрос: как мне лучше это исправить, чтобы он работал?
user @ ubuntu: ~ / Projects / WebService / WebService $ xsp2 - адрес 127.0.0.1 - порт 8889
** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: отсутствует метод System.Web.Configuration.WebConfigurationManager::get_AppSettings() в сборке / usr / lib / mono / gac / System. Web / 2.0.0.0_b03f5f7f11d50a3a / System.Web.dll, на который есть ссылка в сборке /usr/lib/mono/gac/Mono.Web/ 2.0.0.0_0738eb9f132ed756 / Mono.Web.dll
** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: отсутствует метод System.Configuration.ConfigurationProperty::.ctor(строка, тип, объект,TypeConverter,ConfigurationValidatorBase,ConfigurationPropertyOptions) в сборке / home / ellory / Проекты /WebService/WebService/bin/ System.Configuration.dll, на которые есть ссылка в сборке /usr/lib/mono/gac/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: отсутствует метод System.Configuration.ConfigurationProperty::.ctor(строка, тип, объект,TypeConverter,ConfigurationValidatorBase,ConfigurationPropertyOptions) в сборке / home / ellory / Проекты /WebService/WebService/bin/ System.Configuration.dll, на которые есть ссылка в сборке /usr/lib/mono/gac/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: отсутствует метод System.Configuration.ConfigurationProperty::.ctor(строка, тип, объект,TypeConverter,ConfigurationValidatorBase,ConfigurationPropertyOptions) в сборке / home / ellory / Проекты /WebService/WebService/bin/ System.Configuration.dll, на которые есть ссылка в сборке /usr/lib/mono/gac/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll
** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: отсутствует метод System.Configuration.ConfigurationProperty::.ctor(строка, тип, объект,TypeConverter,ConfigurationValidatorBase,ConfigurationPropertyOptions) в сборке /home/ellory/Projects/WebService/WebService/bin/ System.Configuration.dll, ссылка на которую содержится в сборке /usr/lib/mono/gac/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll Обработка типа исключения TargetInvocationException Сообщение является Исключение было брошено целью вызова. IsTerminating имеет значение True System.Reflection.TargetInvocationException: Исключение было сгенерировано целью вызова.
Трассировка стека сервера: в System.Reflection.MonoCMethod.Invoke (объект System.Object, объект BindingFlags invokeAttr, привязка System.Reflection.Binder, параметры System.Object[], культура System.Globalization.CultureInfo) [0x00000] в:0 в системе.Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, привязка System.Reflection.Binder, параметры System.Object[], культура System.Globalization.CultureInfo) [0x00000] в:0 в System.Reflection.ConstructorInfo.Invoke (System.Object[] параметры) [0x00000] в:0 в System.Activator.CreateInstance (тип System.Type, логический nonPublic) [0x00000] в:0 в System.Configuration.ConfigInfo.CreateInstance () [0x00000] в:0 в System.Configuration.SectionInfo.CreateInstance () [0x00000] в:0 в System.Configuration.Configuration.GetSectionInstance (System.Configuration.SectionInfo config, Boolean createDefaultInstance) [0x00000] в:0 в System.Configuration.ConfigurationSectionCollection.ring_In_Signment.ring) [0x00000] в:0 в System.Configuration.Configuration.GetSection (System.String path) [0x00000] в:0 в System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path, System.Web.HttpContext context) [0x00000] в:0 в System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path) [0x00000] в:0 в System.Web.Configuration.WebConfigurationManager.GetWebApplicationSection (System.String sectionName) [0x00000] в:0 в системе.Web.Hosting.ApplicationHost.SetHostingEnvironment () [0x00000] в:0 в System.AppDomain.DoCallBack (System.CrossAppDomainDelegate callBackDelegate) [0x00000] в:0 в (обертка удаленного вызова-вызова-проверки-проверки) System.AppDomain: (System.CrossAppDomainDelegate) в (обертка xdomain-dispatch) System.AppDomain:DoCallBack (объект, байт []&, байт []&)
Возникло исключение в [0]: ---> System.TypeInitializationException: Исключение было сгенерировано инициализатором типа для System.Web.Configuration.HostingEnvironmentSection ---> System.MissingMethodException: Метод не найден: 'System.Configuration.ConfigurationProperty..ctor. --- Конец трассировки стека внутренней исключительной ситуации --- at (управляемая оболочкой) System.Reflection.MonoCMethod:InternalInvoke (объект, объект [],System.Exception&) в System.Reflection.MonoCMethod.Invoke (System. Объект obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] параметры, System.Globalization.CultureInfo culture) [0x00000] in:0 --- Конец трассировки стека внутренней исключительной ситуации --- at (обертка xdomain-invoke) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate) в (обертывание удаленного взаимодействия с проверкой) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate) в System.Web.Hosting.ApplicationHost.CreateApplicationHost (System.TepeTT).String virtualDir, System.String PhysicalDir) [0x00000] в:0 в Mono.WebServer.VPathToHost.CreateHost (сервер Mono.WebServer.ApplicationServer, Mono.WebServer.WebSource webSource) [0x00000] в:0 в Mono.WS.Server.RealMain (аргументы System.String[], логический корень, IApplicationHost ext_apphost, логический тихий) [0x 00000] в:0 at (обертка-удаленное взаимодействие-с-проверкой) Mono.WebServer.XSP.Server: RealMain (string[], bool, Mono.WebServer.IApplicationHost, bool) в Mono.WebServer.XSP.Server.Main (System.String [] args) [0x00000] в:0
1 ответ
DbLinq является основой пространства имен LINQ to SQL и System.Data.Linq в Mono. Таким образом, вам не нужно развертывать / ссылаться на сборки DbLinq. Забудьте о DbLinq, когда вы используете Mono.
Часть LINQ вашего кода не работает, потому что контекст данных не инициализирован должным образом.
Ты должен сделать:
var context = new DataContext("DbLinqProvider=Sqlite; DbLinqConnectionType=Mono.Data.Sqlite.SqliteConnection, Mono.Data.Sqlite, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756; Data Source=openemr.db");
// or
var context = new DataContext(new SqliteConnection("DbLinqProvider=Sqlite; Data Source=openemr.db"));
Смотрите: http://www.mono-project.com/Release_Notes_Mono_2.6#LINQ_to_SQL