次の問題があります。Orleans Grain の単体テストを実装しようとしていますが、開始時に dataprovider Default が見つかりません。例外はコンストラクター呼び出しで発生します。コードは次のとおりです。単体テストクラス
[TestFixture]
public class SdxRemindersTest : TestingSiloHost
{
public SdxRemindersTest ()
: base(new TestingSiloOptions
{
StartPrimary = true,
StartSecondary = false,
SiloConfigFile = new FileInfo("OrleansConfiguration.xml")
}, new TestingClientOptions {ClientConfigFile = new FileInfo("ClientConfiguration.xml")})
{
}
// methods here.........
}
ここに私の設定ファイル OrleansConfiguration.xml があります
<?xml version="1.0" encoding="utf-8"?>
<OrleansConfiguration xmlns="urn:orleans">
<Globals>
<StorageProviders>
<Provider Type="NBOOC.Grains.StorageProviders.CustomSqlStorageProvider"
Name="Default"
Database=""
ConnectionString="" />
</StorageProviders>
<StreamProviders>
<Provider Type="Orleans.Providers.Streams.SimpleMessageStream.SimpleMessageStreamProvider" Name="SMSProvider" FireAndForgetDelivery="false"/>
</StreamProviders>
<BootstrapProviders>
<Provider Type="NBOOC.Grains.OrleansApp" Name="OrleansApp" />
</BootstrapProviders>
<SeedNode Address="localhost" Port="22222"/>
<Messaging ResponseTimeout="30s"/>
<ReminderService ReminderServiceType="ReminderTableGrain"/>
</Globals>
<Defaults>
<Networking Address="localhost" Port="22222"/>
<ProxyingGateway Address="localhost" Port="40000" />
<Tracing DefaultTraceLevel="Warning" TraceToConsole="true" TraceToFile="{0}-{1}.log" PropagateActivityId="false" BulkMessageLimit="1000">
<TraceLevelOverride LogPrefix="Application" TraceLevel="Verbose3" />
<LogConsumer>NBOOC.Grains.Utils.LogConsumer,NBOOC.Grains</LogConsumer>
</Tracing>
<Statistics MetricsTableWriteInterval="30s" PerfCounterWriteInterval="30s" LogWriteInterval="300s" WriteLogStatisticsToTable="true" StatisticsCollectionLevel="Info"/>
</Defaults>
</OrleansConfiguration>
私が持っているエラーはこれです:
Exc レベル 0: Orleans.Runtime.OrleansException: 型 NBOOC.Grains.StorageProviders.CustomSqlStorageProvider,NBOOC.Grains 名のプロバイダー デフォルトが読み込まれませんでした。プロバイダー クラスが定義されているアセンブリを実行フォルダーにデプロイしたことを確認してください。
Orleans.Providers.ProviderLoader`1.ValidateProviders() で
Orleans.Providers.ProviderLoader
1.LoadProviders(IDictionary
2 構成、IProviderManager providerManager で)Orleans.Runtime.Storage.StorageProviderManager.LoadStorageProviders (IDictionary`2 構成) で
Orleans.Runtime.Scheduler.SchedulerExtensions.<>c__DisplayClassa.<b__8>d__c.MoveNext() で
ご覧のとおり、完全に指定されたタイプの Default という名前のプロバイダーがあります。そこに指定されたクラスは、すべての参照が存在するためアクセス可能です。これを明示的に確認しました。すべての DLL は、単体テスト DLL と同じフォルダーに配置されています。また、Orleans DLL のすべてのバージョンを確認しました。これらはすべて同じ 1.0.10.0 であるため、バージョンの問題ではありません。誰もそのようなことに直面したことがありますか?それを修正する方法はありますか?
PS ところで、参考になる場合に備えて。Orleans のソースをダウンロードし、例外が発生する場所を追跡しました。ProviderLoader クラスがあり、プロバイダーのディクショナリがありますが、何らかの理由で空です。