A gyorsítótár-megosztási szintek módosítása a küldési tevékenységekhez
A SendMessageChannelCache bővítmény lehetővé teszi a gyorsítótár-megosztási szintek, a channel factory cache beállításainak és a csatornagyorsítótár beállításainak testreszabását olyan munkafolyamatokhoz, amelyek üzenetküldési tevékenységekkel Send küldenek üzeneteket a szolgáltatásvégpontoknak. Ezek a munkafolyamatok általában ügyfél-munkafolyamatok, de lehetnek munkafolyamat-szolgáltatások is, amelyek egy WorkflowServiceHost. A csatorna-előállító gyorsítótára gyorsítótárazott ChannelFactory<TChannel> objektumokat tartalmaz. A csatornagyorsítótár gyorsítótárazott csatornákat tartalmaz.
Feljegyzés
A munkafolyamatok Send üzenetküldési tevékenységekkel küldhetnek üzeneteket vagy paramétereket. A munkafolyamat-futtatókörnyezet olyan csatorna-előállítókat ad hozzá a gyorsítótárhoz, amelyek akkor hoznak létre típusú IRequestChannel csatornákat, amikor tevékenységet használ ReceiveReply egy Send tevékenységgel, és IOutputChannel amikor csak egy Send tevékenységet használ (nem ReceiveReply).
A gyorsítótár-megosztási szintek
Alapértelmezés szerint az üzenetkezelési tevékenységek által használt gyorsítótár által WorkflowServiceHostSend üzemeltetett munkafolyamatokban a rendszer a (gazdagépszintű gyorsítótárazás) összes munkafolyamat-példánya WorkflowServiceHost között meg van osztva. Olyan ügyfél-munkafolyamat esetén, amelyet nem egy WorkflowServiceHostügyfél üzemeltet, a gyorsítótár csak a munkafolyamat-példány számára érhető el (példányszintű gyorsítótárazás). A gyorsítótár csak olyan tevékenységekhez Send érhető el, amelyek nem használják a konfigurációban meghatározott végpontokat, kivéve, ha engedélyezve van a nem biztonságos gyorsítótárazás.
Az alábbiakban a munkafolyamat tevékenységeihez Send elérhető különböző gyorsítótár-megosztási szinteket és azok ajánlott használatát ismertetjük:
Gazdagépszint: A gazdagépmegosztási szinten a gyorsítótár csak a munkafolyamat-szolgáltatás gazdagépében üzemeltetett munkafolyamat-példányok számára érhető el. A gyorsítótár a munkafolyamat-szolgáltatás gazdagépei között is megosztható egy folyamatszintű gyorsítótárban.
Példányszint: A példánymegosztási szinten a gyorsítótár egy adott munkafolyamat-példány számára teljes élettartama alatt elérhető, de a gyorsítótár más munkafolyamat-példányok számára nem érhető el.
Nincs gyorsítótár: A gyorsítótár alapértelmezés szerint ki van kapcsolva, ha olyan munkafolyamattal rendelkezik, amely a konfigurációban meghatározott végpontokat használja. Azt is javasoljuk, hogy ebben az esetben a gyorsítótár ki legyen kapcsolva, mert a bekapcsolása nem biztonságos lehet. Ha például minden küldéshez más identitásra (eltérő hitelesítő adatokra vagy megszemélyesítésre) van szükség.
Ügyfél-munkafolyamat gyorsítótár-megosztási szintjének módosítása
Ha a gyorsítótár-megosztást egy ügyfél-munkafolyamatban szeretné beállítani, adja hozzá az SendMessageChannelCache osztály egy példányát bővítményként a kívánt munkafolyamat-példánykészlethez. Ez azt eredményezi, hogy az összes munkafolyamat-példányon megosztja a gyorsítótárat. Az alábbi példakód bemutatja, hogyan hajthatja végre ezeket a lépéseket.
Először deklaráljuk a típuspéldányt SendMessageChannelCache.
// Create an instance of SendMessageChannelCache with default cache settings.
static SendMessageChannelCache sharedChannelCacheExtension =
new SendMessageChannelCache();
Ezután adja hozzá a gyorsítótár-bővítményt minden ügyfél-munkafolyamat-példányhoz.
WorkflowApplication clientInstance1 = new WorkflowApplication(new clientWorkflow1());
WorkflowApplication clientInstance2 = new WorkflowApplication(new clientWorkflow2());
// Share the cache extension object
clientInstance1.Extensions.Add(sharedChannelCacheExtension);
clientInstance2.Extensions.Add(sharedChannelCacheExtension);
Üzemeltetett munkafolyamat-szolgáltatás gyorsítótár-megosztási szintjének módosítása
Ha egy üzemeltetett munkafolyamat-szolgáltatásban szeretné beállítani a gyorsítótár-megosztást, adja hozzá az SendMessageChannelCache osztály egy példányát bővítményként az összes munkafolyamat-szolgáltatás gazdagépéhez. Ez azt eredményezi, hogy megosztja a gyorsítótárat az összes munkafolyamat-szolgáltatás gazdagépén. Az alábbi példakódok ezeket a lépéseket mutatják be.
Először deklaráljuk a típuspéldányt SendMessageChannelCache az osztály szintjén.
// Create static instance of SendMessageChannelCache with default cache settings.
static SendMessageChannelCache sharedChannelCacheExtension = new
SendMessageChannelCache();
Ezután adja hozzá a statikus gyorsítótár-bővítményt minden munkafolyamat-szolgáltatás gazdagépéhez.
WorkflowServiceHost host1 = new WorkflowServiceHost(new serviceWorkflow1(), new Uri(baseAddress1));
WorkflowServiceHost host2 = new WorkflowServiceHost(new serviceWorkflow2(), new Uri(baseAddress2));
// Share the static cache to get an AppDomain level cache.
host1.WorkflowExtensions.Add(sharedChannelCacheExtension);
host2.WorkflowExtensions.Add(sharedChannelCacheExtension);
Ha egy üzemeltetett munkafolyamat-szolgáltatás gyorsítótár-megosztását példányszintre szeretné állítani, adjon hozzá egy Func<SendMessageChannelCache>
delegáltat bővítményként a munkafolyamat-szolgáltatás gazdagépéhez, és rendelje hozzá ezt a meghatalmazottat ahhoz a kódhoz, amely az SendMessageChannelCache osztály új példányát példányosítja. Ez az egyes munkafolyamat-példányokhoz eltérő gyorsítótárat eredményez a munkafolyamat-szolgáltatás gazdagépén található összes munkafolyamat-példány által megosztott egyetlen gyorsítótár helyett. Az alábbi példakód bemutatja, hogyan érheti el ezt úgy, hogy egy lambda-kifejezéssel közvetlenül meghatározza a SendMessageChannelCache delegált által használt bővítményt.
serviceHost.WorkflowExtensions.Add(() => new SendMessageChannelCache
{
// Use FactorySettings property to add custom factory cache settings.
FactorySettings = new ChannelCacheSettings
{ MaxItemsInCache = 5, },
// Use ChannelSettings property to add custom channel cache settings.
ChannelSettings = new ChannelCacheSettings
{ MaxItemsInCache = 10 },
});
Gyorsítótár-Gépház testreszabása
Testre szabhatja a csatorna-gyári gyorsítótár és a csatornagyorsítótár gyorsítótárának gyorsítótár-beállításait. A gyorsítótár beállításai az ChannelCacheSettings osztályban vannak definiálva. Az SendMessageChannelCache osztály a csatorna-előállító gyorsítótára és a csatornagyorsítótár alapértelmezett gyorsítótár-beállításait határozza meg a paraméter nélküli konstruktorban. Az alábbi táblázat felsorolja ezeknek a gyorsítótár-beállításoknak az alapértelmezett értékeit az egyes gyorsítótártípusokhoz.
Beállítások | LeaseTimeout (perc) | IdleTimeout (perc) | MaxItemsInCache |
---|---|---|---|
Gyári gyorsítótár alapértelmezett beállítása | TimeSpan.MaxValue | 2 | 16 |
Csatornagyorsítótár alapértelmezett beállítása | 5 | 2 | 16 |
A gyári gyorsítótár és a csatornagyorsítótár beállításainak testreszabásához példányosítsa az SendMessageChannelCache osztályt a paraméteres konstruktor SendMessageChannelCache használatával, és adjon át egy új példányt egyéni ChannelCacheSettings értékekkel az factorySettings
egyes és channelSettings
paramétereknek. Ezután adja hozzá az osztály új példányát bővítményként egy munkafolyamat-szolgáltatás gazdagépéhez vagy egy munkafolyamat-példányhoz. Az alábbi példakód bemutatja, hogyan hajthatja végre ezeket a lépéseket egy munkafolyamat-példány esetében.
ChannelCacheSettings factorySettings = new ChannelCacheSettings{
MaxItemsInCache = 5,
IdleTimeout = TimeSpan.FromMinutes(5),
LeaseTimeout = TimeSpan.FromMinutes(20)};
ChannelCacheSettings channelSettings = new ChannelCacheSettings{
MaxItemsInCache = 5,
IdleTimeout = TimeSpan.FromMinutes(2),
LeaseTimeout = TimeSpan.FromMinutes(10) };
SendMessageChannelCache customChannelCacheExtension =
new SendMessageChannelCache(factorySettings, channelSettings);
clientInstance.Extensions.Add(customChannelCacheExtension);
Ha engedélyezni szeretné a gyorsítótárazást, ha a munkafolyamat-szolgáltatásban konfigurációban definiált végpontok vannak meghatározva, példányosíthatja az osztályt a SendMessageChannelCache paraméteres konstruktor használatával a paraméteres true
konstruktorralSendMessageChannelCache.allowUnsafeCaching
Ezután adja hozzá az osztály új példányát bővítményként egy munkafolyamat-szolgáltatás gazdagépéhez vagy egy munkafolyamat-példányhoz. Az alábbi példakód bemutatja, hogyan engedélyezheti a gyorsítótárazást egy munkafolyamat-példányhoz.
SendMessageChannelCache customChannelCacheExtension =
new SendMessageChannelCache{ AllowUnsafeCaching = true };
clientInstance.Extensions.Add(customChannelCacheExtension);
A csatornagyárak és csatornák gyorsítótárának teljes letiltásához tiltsa le a csatorna-előállító gyorsítótárát. Ezzel kikapcsolja a csatornagyorsítótárat is, mivel a csatornák a megfelelő csatornagyárak tulajdonában vannak. A csatorna-előállító gyorsítótárának letiltásához adja át a factorySettings
paramétert a SendMessageChannelCache konstruktornak, amely inicializálva van egy ChannelCacheSettings 0 értékű példánynak MaxItemsInCache . Az alábbi példakód ezt mutatja be.
// Disable the factory cache. This results in the channel cache to be turned off as well.
ChannelCacheSettings factorySettings = new ChannelCacheSettings
{ MaxItemsInCache = 0 };
ChannelCacheSettings channelSettings = new ChannelCacheSettings();
SendMessageChannelCache customChannelCacheExtension =
new SendMessageChannelCache(factorySettings, channelSettings);
clientInstance.Extensions.Add(customChannelCacheExtension);
Dönthet úgy, hogy csak a csatorna-előállító gyorsítótárát használja, és letiltja a csatornagyorsítótárat, ha a channelSettings
paramétert a SendMessageChannelCache konstruktornak 0 értékű példánynak ChannelCacheSettingsMaxItemsInCache inicializálja. Az alábbi példakód ezt mutatja be.
ChannelCacheSettings factorySettings = new ChannelCacheSettings();
// Disable only the channel cache.
ChannelCacheSettings channelSettings = new ChannelCacheSettings
{ MaxItemsInCache = 0};
SendMessageChannelCache customChannelCacheExtension =
new SendMessageChannelCache(factorySettings, channelSettings);
clientInstance.Extensions.Add(customChannelCacheExtension);
Egy üzemeltetett munkafolyamat-szolgáltatásban megadhatja a gyári gyorsítótár és a csatornagyorsítótár beállításait az alkalmazáskonfigurációs fájlban. Ehhez adjon hozzá egy szolgáltatás viselkedést, amely tartalmazza a gyári és csatornagyorsítótár gyorsítótár-beállításait, és adja hozzá ezt a szolgáltatás viselkedését a szolgáltatáshoz. Az alábbi példa egy konfigurációs fájl tartalmát mutatja be, amely a MyChannelCacheBehavior
szolgáltatás viselkedését tartalmazza az egyéni gyári gyorsítótár és a csatornagyorsítótár beállításaival. Ez a szolgáltatás viselkedése az attribútumon keresztül lesz hozzáadva a behaviorConfiguration
szolgáltatáshoz.
<configuration>
<system.serviceModel>
<!-- List of other config sections here -->
<behaviors>
<serviceBehaviors>
<behavior name="MyChannelCacheBehavior">
<sendMessageChannelCache allowUnsafeCaching ="false" >
<!-- Control only the host level settings -->
<factorySettings maxItemsInCache = "8" idleTimeout = "00:05:00" leaseTimeout="10:00:00" />
<channelSettings maxItemsInCache = "32" idleTimeout = "00:05:00" leaseTimeout="00:06:00" />
</sendMessageChannelCache>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="MyService" behaviorConfiguration="MyChannelCacheBehavior" />
</services>
</system.serviceModel>
</configuration>