Megosztás a következőn keresztül:


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 truekonstruktorralSendMessageChannelCache.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>