Ссылка Dblinq в веб-службе ASP.NET на MonoDevelop приводит к сбою xsp2 - PullRequest
2 голосов
/ 11 октября 2010

Я пытаюсь попробовать DBLinq с провайдером sqlite в простой сети ASP.NET оказание услуг. Я также использую MonoDevelop 2.4 и Mono 2.6.7, проект в monodevelop ссылается на DbLinq.dll, который по умолчанию установлен в Локальная копия. Я могу скомпилировать веб-сервис просто отлично. Когда я пытаюсь запустить его из Monodevelop или с помощью xsp2 из командной строки, xsp2 терпит неудачу с рядом ошибок (см. ниже). Если я снял флажок Местный Скопируйте для ссылки DBLinq.dll, xsp2 будет выполняться, но часть Linq кода не работает. Это также верно для провайдера MySQL. Я думаю, что проблема в том, что когда на DbLinq ссылаются и локально копируют, он также копирует зависимый сборки и одна из сборок вызывает удушье xsp2.

Кто-нибудь сталкивался с этим? Как я могу решить проблему или что такое обходной путь? Любая помощь очень ценится. Ниже образец фрагмент метода веб-сервиса в коде 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 += "; "; 
            } 
    } 

return 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 ::. Т е р (строка, тип, объект, 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 ::. Т е р (строка, тип, объект, 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 ::. Т е р (строка, тип, объект, 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 ::. Т е р (строка, тип, объект, 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 Обработка типа исключения TargetInvocationException Сообщение «Исключение» было выдано целью вызова. IsTerminating имеет значение True System.Reflection.TargetInvocationException: было сгенерировано исключение целью вызова.

Трассировка стека серверов: в System.Reflection.MonoCMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, SystПараметры em.Object [], культура System.Globalization.CultureInfo) [0x00000] in: 0 в System.Reflection.MonoCMethod.Invoke (связывание BindingFlags invokeAttr, System.Reflection.Binder, параметры System.Object [], System.Globalization.CultureInfo culture) [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.get_Item (имя System.String) [0x00000] в: 0 в System.Configuration.Configuration.GetSection (путь System.String) [0x00000] в: 0 вSystem.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, путь System.String, контекст System.Web.HttpContext) [0x00000] в: 0 в System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path) [0x00000] в: 0 в System.Web.Configuration.WebConfigurationManager.0x00000] in: 0 at (обертка remoting-invoke-with-check) System.AppDomain: DoCallBack (System.CrossAppDomainDelegate) в (wrapper 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, логический тихий) [0x00000] in: 0 at (обертка, удаленное взаимодействие, вызов с проверкой) Mono.WebServer.XSP.Server: RealMain (string [], bool, Mono.WebServer.IApplicationHost, bool) в Mono.WebServer.XSP.Server.Main(System.String [] args) [0x00000] в: 0

1 Ответ

0 голосов
/ 10 декабря 2011

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

...