我们希望在使用Sqlite的项目中使用AppFabric缓存,包括ReadThruogh-WriteBehind功能。我成功创建了Provider并注册到了GAC。如果我选择mssql服务作为数据提供者,一切都成功。另一方面,如果我选择了sqlite,它会在GAC中的Provider上的这一行引发异常。
SQLiteConnection conn = new SQLiteConnection(@"path");
此异常来自GAC中的Provider,但如果我在服务中写入此行,则可以正常工作。所以问题是,如果我想从GAC连接sqlite,它会引发异常:
缓存提供程序在读取期间抛出异常。
错误消息中没有更多解释,但如果尝试从服务连接sqlite,它会成功连接。 Sqlite db文件允许每个人阅读。
似乎存在身份验证问题或类似问题。什么可以解决方案?
答案 0 :(得分:1)
您将获得的错误代码转换为DataCacheErrorCode.ReadThroughProviderFailure,因此这是一个错误,发生在服务端而不是客户端,所以 客户端配置无济于事。
在这种情况下,你应该先 检查您是否已创建Read-Through提供程序并将其安装在上面 缓存服务器。
如果您创建了一个,则会出现此错误 CUSTOM Read-Through提供程序(AppFabric 1.1中的新功能)和一个 异常发生在该提供程序的READ方法中。更多 有关创建提供商的详细信息 http://msdn.microsoft.com/en-us/library/hh361698(v=azure.10).aspx
如果这是一个可重现的错误,那么您应该能够轻松调试 Cache服务器上的DistributedCacheService.exe进程并放入一个 关于PUT方法的断点并逐步通过它看看你是否可以 找到例外。
测试和调试提供程序部分 这个详细。
答案 1 :(得分:0)
在GAC中调试提供程序后,问题是关于System.Data.SQLite.dll。我必须将该dll注册到GAC中,因为它也试图从gac中找到该dll,因此它抛出异常。你需要确定,dll应该有很强的名字。要使其具有强名称,您需要执行以下说明,
1. sn -k keyPair.snk
2. ildasm System.Data.SQLite.dll
3. /out:System.Data.SQLite.il ren System.Data.SQLite.dll
4. System.Data.SQLite.dll.orig ilasm System.Data.SQLite.il /dll /key=
keyPair.snk
如果您的dll已经具有强名称(您可以从dll属性中检查它),则无需执行这些步骤。您可以按照以下代码直接将dll注册到GAC中,
gacutil -i System.Data.SQLite.dll
我希望它会有用。