背景
我有一个使用nhibernate的bll dll。我在客户机应用程序和WCF服务之间共享相同的BLL(即使客户机在另一台机器上运行)。
我可以将sqlserverce或sqlserver驱动程序与BLL一起成功地用于客户端应用程序,但只能将sqlserver驱动程序用于WCF。
如果将hibernate.cfg.xml更改为使用SQL Server,则可以根据需要使用该服务,而不会引发任何异常。
误差
log4net输出的确切错误是:
2421, 5, DEBUG, NHibernate.Connection.DriverConnectionProvider, (null),Obtaining IDbConnection from Driver
2483, 5, DEBUG, NHibernate.Connection.DriverConnectionProvider, (null),Exception thrown obtaining connection: Exception has been thrown by the target of an invocation.
我的wcf代码隐藏文件中还包含以下代码:
AppDomain.CurrentDomain.SetData("SQLServerCompactEditionUnderWebHosting", true);
笔记
-
wcf bin目录包含nhibernate和sqlserverce所需的所有dll
-
不管System.Data.sqlserverce.dll是否在GAC中
-
不管是否将system.data.sqlserverce.dll添加到程序集下的web.config文件中
-
操作系统是Windows Server 2003 R2 SP2
-
已安装.NET Framework 3.5sp1
-
已安装Visual Studio 2008
-
只是为了以防万一,我卸载了与Compact Edition有关的任何内容,但这仍然没有解决问题。
问题
您将如何尝试并确定为什么nhibernate无法加载sqlserverce框架?
你会进行什么样的法医分析来尝试和准确地确定问题,以便找到解决方法?
更新1
如果这是我的代码,我只是创建了一个简单的网站,并能够成功地使用ORM插入和检索记录,使用到SDF数据库的硬编码路径。如果我对WebService使用相同的休眠配置文件,则会生成异常。这确实将问题缩小到了WCF实现。