2

我正在尝试在一个简单的 ASP.NET Web 服务中使用 sqlite 提供程序来尝试 DBLinq。我也在使用 MonoDevelop 2.4 和 Mono 2.6.7,monodevelop 中的项目引用了默认设置为本地副本的 DbLinq.dll。我可以很好地编译网络服务。当我尝试从 Monodevelop 运行它或从命令行使用 xsp2 时,xsp2 失败并出现许多错误(见下文)。如果我取消选中 DBLinq.dll 引用的本地副本,xsp2 将执行,但代码的 Linq 部分不起作用。对于 MySQL 提供程序也是如此。我认为问题在于当 DbLinq 被引用并被本地复制时,它也会复制依赖程序集,并且其中一个程序集导致 xsp2 阻塞。

有没有人遇到过这个?我该如何解决问题或解决方法是什么?很感谢任何形式的帮助。下面是后面 asmx 代码中 webservice 方法的示例片段。

[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 引用并在本地复制的依赖程序集之一导致了这种情况的发生。我的问题是我如何最好地解决这个问题,让它工作?

user@ubuntu:~/Projects/WebService/WebService$ xsp2 --address 127.0.0.1 --port 8889

** (/usr/lib/mono/2.0/xsp2.exe:2566): 警告 **: 程序集 /usr/lib/mono/gac/System 中缺少方法 System.Web.Configuration.WebConfigurationManager::get_AppSettings()。 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(string,Type,object,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

** (/usr/lib/mono/2.0/xsp2.exe:2566): 警告 **: 缺少方法 System.Configuration.ConfigurationProperty::.ctor(string,Type,object,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

** (/usr/lib/mono/2.0/xsp2.exe:2566): 警告 **: 缺少方法 System.Configuration.ConfigurationProperty::.ctor(string,Type,object,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

** (/usr/lib/mono/2.0/xsp2.exe:2566): 警告 **: 缺少方法 System.Configuration.ConfigurationProperty::.ctor(string,Type,object,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 obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfo 文化) [0x00000] in :0 在 System .Reflection.MonoCMethod.Invoke (BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfoculture) [0x00000] in :0 at System.Reflection.ConstructorInfo.Invoke (System.Object[ ] 参数) [0x00000] in :0 at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000] in :0 at System.Configuration.ConfigInfo.CreateInstance () [0x00000] in :0 at System.Configuration .SectionInfo.CreateInstance () [0x00000] in :0 在 System.Configuration.Configuration.GetSectionInstance (System.Configuration.SectionInfo 配置,Boolean createDefaultInstance) [0x00000] in :0 at System.Configuration.ConfigurationSectionCollection.get_Item (System.String name) [0x00000] in :0 at System.Configuration.Configuration.GetSection (System.String path) [0x00000] in :0 at System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System.String path, System.Web.HttpContext context) [0x00000] in :0 at System.Web.Configuration.WebConfigurationManager.GetSection (System.String sectionName, System .String 路径)[0x00000] 在:0 在 System.Web.Configuration.WebConfigurationManager.GetWebApplicationSection(System.String sectionName)[0x00000] 在:0 在 System.Web.Hosting.ApplicationHost.SetHostingEnvironment () [0x00000] 在:0在 System.AppDomain.DoCallBack (System.CrossAppDomainDelegate callBackDelegate) [0x00000] 中:0 at (wrapper remoting-invoke-with-check) System.AppDomain:DoCallBack (System.CrossAppDomainDelegate) at (wrapper xdomain-dispatch) System.AppDomain:DoCallBack (object,byte[]&,byte[]&)

[0] 处重新抛出异常:---> System.TypeInitializationException:System.Web.Configuration.HostingEnvironmentSection 的类型初始化程序引发了异常---> System.MissingMethodException:找不到方法:'System.Configuration.ConfigurationProperty。 .ctor'。--- 内部异常堆栈跟踪结束 --- 在 System.Reflection.MonoCMethod.Invoke (System.Reflection.MonoCMethod.Invoke (object,object[],System.Exception&) 处 (wrapper managed-to-native) System.Reflection.MonoCMethod:InternalInvoke (object,object[],System.Exception&)对象 obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] 参数, System.Globalization.CultureInfoculture) [0x00000] in :0 --- End of internal exception stack trace --- at (wrapper xdomain-调用)System.AppDomain:DoCallBack(系统。

4

1 回答 1

0

DbLinq 是 LINQ to SQL 和 Mono 上 System.Data.Linq 命名空间的基础。因此,您不必部署/引用 DbLinq 程序集。使用 Mono 时忘记 DbLinq。

代码的 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

于 2011-12-10T00:34:05.253 回答