0

我想试用 AppFabric 1.1 的新的 read-through/write-behind 功能。根据http://msdn.microsoft.com/en-us/library/hh361698%28v=azure.10%29.aspx ,我实现了一个引用其他一些自己的程序集的提供程序。所有都是为 AnyCPU 签名和编译的。我将提供程序和所有引用的程序集放在 GAC 中(请参阅http://msdn.microsoft.com/en-us/library/hh361703(v=azure.10).aspx)。然后我停止了缓存集群并创建了一个新的缓存,其中包含通读和后写选项传递我的提供程序程序集的全名(我从 gacutil -l 获得的)。

New-Cache ReadThroughWriteBehindCache -ReadThroughEnabled true -WriteBehindEnabled true 
-WriteBehindInterval 60 -ProviderType "CachingDemo.Provider, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=236fd28d53a6f1ad" -ProviderSettings @{"connectionString"="Data Source=.;Initial
Catalog=Demo;Persist Security Info=True;User 
ID=sa;Password=password;MultipleActiveResultSets=True";"logFilePath"="C:\Logs\CacheProvider"}

再次启动缓存集群时,我在事件日志中收到超时和以下错误消息:

AppFabric Caching service crashed with exception Microsoft.ApplicationServer.Caching.DataCacheException:
ErrorCode<ERRCMS0007>:SubStatus<ES0001>:Provider "CachingDemo.Provider, Version=1.0.0.0, 
Culture=neutral, PublicKeyToken=236fd28d53a6f1ad" instantiation failed: The given assembly name 
or codebase was invalid. (Exception from HRESULT: 0x80131047)  ---> System.IO.FileLoadException:
The given assembly name or codebase was invalid. (Exception from HRESULT: 0x80131047)

什么可能是错的?我对程序集名称进行了三重检查。我在创建缓存时传递的名称与我从 gacutil -l 获得的名称完全相同。组件是 AnyCPU,无论如何都应该工作。由于程序集甚至没有加载,因此可以排除程序集内部的错误。

4

1 回答 1

0

原因是在创建缓存时未正确传递提供程序类型信息。我假设 AppFabric 会自己找到提供者(通过反射)。但是我们必须在 ProviderType 参数中添加提供者类型。另外,在类型和程序集信息之间只允许使用逗号(例如,不能使用带空格的逗号):

New-Cache ReadThroughWriteBehindCache -ReadThroughEnabled true -WriteBehindEnabled true
-WriteBehindInterval 60 -ProviderType CachingDemo.Provider.Provider,CachingDemo.Provider, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=236fd28d53a6f1ad" 
-ProviderSettings @{"connectionString"="Data Source=.;
Initial Catalog=Demo;Persist Security Info=True;
User ID=sa;Password=password;MultipleActiveResultSets=True";
"logFilePath"="C:\Logs\CacheProvider"}
于 2013-11-17T17:04:04.453 回答