2010-10-11 1 views
2

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

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

возвращение TXT;
}

Конечно, это не может быть хорошим способом для осуществления доступа к данным и необходимо отделить проблемы. Но для целей тестирования этот должен по крайней мере работать.

Вот ошибка, которую я получаю при запуске xsp2. Как я сказал выше, одна из зависимых сборок , которую DbLinq ссылается и копирует локально, составляет , в результате чего это происходит. Мой вопрос: как лучше всего исправить это, так работает ?

пользователь @ Ubuntu: ~/Проекты/WebService/WebService $ xsp2 --address 127.0.0.1 --port 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/xsp 2.exe: 2566): ПРЕДУПРЕЖДЕНИЕ **: Отсутствует метод System.Configuration.ConfigurationProperty ::. Ctor (string, Type, object, TypeConverter, ConfigurationValidatorBase, ConfigurationPropertyOptions) в сборке/home/eellory/Projects/WebService/WebService/бен/ System.Configuration.dll, ссылка в сборке/USR/Lib/моно/GAC/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll

** (/ USR/Lib/моно/2.0/xsp2.exe: 2566): ПРЕДУПРЕЖДЕНИЕ **: Отсутствует метод System.Configuration.ConfigurationProperty ::. Ctor (string, Type, object, TypeConverter, ConfigurationValidatorBase, ConfigurationPropertyOptions) в сборке/home/eellory/Projects/WebService/WebService/bin/ System.Configuration.DLL, ссылки в сборке/USR/Lib/моно/GAC/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll

** (/usr/lib/mono/2.0/xsp2.exe:2566): ПРЕДУПРЕЖДЕНИЕ **: Отсутствует метод System.Configuration.ConfigurationProperty ::. Ctor (string, Type, object, TypeConverter, ConfigurationValidatorBase, ConfigurationPropertyOptions) в сборке/home/eellory/Projects/WebService/WebService/bin/ Система. Configuration.dll, ссылки в сборке/USR/Lib/моно/GAC/ System.Web/2.0.0.0__b03f5f7f11d50a3a/System.Web.dll

** (/usr/lib/mono/2.0/xsp2.exe : 2566): ПРЕДУПРЕЖДЕНИЕ **: Отсутствует метод System.Confi ginary.ConfigurationProperty ::. ctor (string, Type, object, TypeConverter, ConfigurationValidatorBase, ConfigurationPropertyOptions) в сборке/home/eellory/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 OBJ, BindingFlags invokeAttr, System.Reflection.Binder связующего вещества, System.Object [] параметров, System.Globalization.CultureInfo культуры) [0x00000] в: 0 в System.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, Boolea п Непубличная) [0x00000] в: 0 в System.Configuration.ConfigInfo.CreateInstance() [0x00000] в : 0 в System.Configuration.SectionInfo.CreateInstance() [0x00000] в : 0 в системе. Configuration.Configuration.GetSectionInstance (System.Configuration.SectionInfo конфигурации, Boolean createDefaultInstance) [0x00000] в: 0 в System.Configuration.ConfigurationSectionCollection.get_Item (System.String имя) [0x00000] в: 0 в системе. Configuration.Configuration.GetSection (System.String ) [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) имя раздела [0x00000] в: 0 в System.Web.Hosting.ApplicationHost.SetHostingEnvironment() [0x00000] в: 0 на System.AppDomain.DoCallBack (System.CrossAppDomainDelegate callBackDelegate) [0x00000] в: 0 в (обертка-вызова удаленной-с проверкой) System.AppDomain: DoCallBack (System.CrossAppD omainDelegate) at (обертка xdomain-отправка) система.AppDomain: DoCallBack (объект, байт [] &, байт [] &)

Исключение при вызваны повторно [0]: ---> System.TypeInitializationException: исключение брошенной типа инициализатора для системы. Web.Configuration.HostingEnvironmentSection ---> System.MissingMethodException: метод не найден: 'System.Configuration.ConfigurationProperty..ctor'. --- Конец внутренней трассировки стека исключений --- при (обертку управляемом к родным) System.Reflection.MonoCMethod: InternalInvoke (объект, объект [], System.Exception &) на System.Reflection. MonoCMethod.Invoke (System.Object OBJ, BindingFlags invokeAttr, System.Reflection.Binder связующее, System.Object [] параметры, System.Globalization.CultureInfo культура) [0x00000] в: 0 --- Конец внутреннего исключения трассировка стека --- at (wrapper xdomain-invoke) System.AppDomain: DoCallBack (System.CrossAppDomainDelegate) at (wrapper remoting-invoke-with-check) System.AppDomain: DoCallBack (System.CrossAppDomainDelegate) на System.Web.Hosting.ApplicationHost.CreateApplicationHost (System.Type hostType, System.String virtualDir, System.String physicalDir) [0x00000] в: 0 в Mono.WebServer.VPathToHost.CreateHost (Mono.WebServer.ApplicationServer сервер, Mono.WebServer.WebSource webSource) [0x00000] в: 0 в Mono.WebServer.XSP.Server.RealMain (System.String [] арг, булева корень, IApplicationHost ext_apphost, Boolean тихий) [0x00000] в : 0 в (обертка Remoting-вызова-с чеком) Mono.WebServer.XSP.Server: RealMain (строка [], BOOL, Mono.WebServer.IApplicationHost, BOOL) в Mono.WebServer.XSP.Server.Main (System.String [] арг) [0x00000] в: 0

ответ

0

DbLinq является основой LINQ к 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

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