2

Microsoft CRM の一部のプラグインのインメモリ キャッシングを行っています。同じキャッシュにデータを入力するさまざまな組織について心配する必要があるかどうかを把握しようとしています。

// In Some Plugin
var settings = Singleton.GetCache["MyOrgSpecificSetting"];
// Use Org specific cached Setting:

または、設定を相互汚染しないようにするために、次のようなことをする必要がありますか?

// In Some Plugin
var settings = Singleton.GetCache[GetOrgId() + "MyOrgSpecificSetting"];
// Use Org specific cached Setting:

これは、AsyncWorkflowService のカスタム アクティビティにも考慮する必要があると思いますか?

4

3 に答える 3

0

ロードされたアセンブリごとの AppDomain は言うまでもなく、少なくとも独自の AppDomain に各 CRM組織を実装しないことは、Microsoft にとって技術的に不可能だと思います。プラグイン アセンブリの複数のバージョンが複数の組織に展開され、同じ AppDomain に読み込まれて実行される方法を想像しようとしていますが、現実的な方法は考えられません。しかし、それは私の想像力の欠如かもしれません。

あなたの問題は、組織間で同じプラグインを共有することよりも、並行性 (マルチスレッド) にあると思います。@BlueSam は、Microsoft が、同じプラグインの複数のインスタンスが 1 つの AppDomain に存在できると言っているように見えることを引用しています。複数のスレッドがメモリ内キャッシュに対して同時に読み書きできることを確認してください。本当に確認したい場合は、2 番目の例のように、キャッシュ キーの先頭に OrgId を追加します。

並行キャッシュを実装できると思うので、ここでは詳しく説明しません。

于 2015-03-10T15:55:58.113 に答える