Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
SendMessageChannelCache Rozszerzenie umożliwia dostosowanie poziomów udostępniania pamięci podręcznej, ustawień pamięci podręcznej fabryki kanału oraz ustawień pamięci podręcznej kanału dla przepływów pracy, które wysyłają komunikaty do punktów końcowych usługi przy użyciu Send działań obsługi komunikatów. Te przepływy pracy są zwykle przepływami pracy klienta, ale mogą być również usługami przepływu pracy hostowanymi w programie WorkflowServiceHost. Pamięć podręczna fabryki kanałów przechowuje zbuforowane obiekty ChannelFactory<TChannel>. Pamięć podręczna kanału zawiera buforowane kanały.
Uwaga / Notatka
Procesy robocze mogą używać Send czynności związanych z wiadomościami do wysyłania wiadomości lub parametrów. Środowisko uruchomieniowe przepływu pracy dodaje do pamięci podręcznej fabryki kanałów, które tworzą kanały typu IRequestChannel podczas użycia działania ReceiveReply z działaniem Send, a kanał typu IOutputChannel podczas użycia tylko działania Send (bez ReceiveReply).
Poziomy udostępniania pamięci podręcznej
Domyślnie, w przepływie pracy hostowanym przez WorkflowServiceHost, pamięć podręczna wykorzystywana przez działania komunikacyjne Send jest współdzielona pomiędzy wszystkimi wystąpieniami przepływu pracy w WorkflowServiceHost (buforowanie na poziomie hosta). W przypadku przepływu pracy klienta, który nie jest hostowany przez jednostkę WorkflowServiceHost, cache jest dostępny wyłącznie na poziomie wystąpienia przepływu pracy (buforowanie na poziomie wystąpienia). Pamięć podręczna jest dostępna tylko dla Send działań, które nie używają punktów końcowych zdefiniowanych w konfiguracji, chyba że włączono niebezpieczne buforowanie.
Poniżej przedstawiono różne poziomy udostępniania pamięci podręcznej dostępne dla Send działań w przepływie pracy i ich zalecane użycie:
Poziom hosta: na poziomie udostępniania hosta pamięć podręczna jest dostępna tylko dla wystąpień przepływu pracy hostowanych na hoście usługi przepływu pracy. Pamięć podręczną można również udostępniać między hostami usługi przepływu pracy w pamięci podręcznej obejmującej cały proces.
Poziom wystąpienia: na poziomie udostępniania wystąpienia pamięć podręczna jest dostępna dla określonego wystąpienia przepływu pracy przez cały okres istnienia, ale pamięć podręczna nie jest dostępna dla innych wystąpień przepływu pracy.
Brak pamięci podręcznej: pamięć podręczna jest domyślnie wyłączona, jeśli masz przepływ pracy, który używa punktów końcowych zdefiniowanych w konfiguracji. Zaleca się również wyłączenie pamięci podręcznej w tym przypadku, ponieważ włączenie tej pamięci podręcznej może być niezabezpieczone. Jeśli na przykład dla każdego wysyłania jest wymagana inna tożsamość (różne poświadczenia lub personifikacja).
Zmiana poziomu udostępniania pamięci podręcznej dla przepływu pracy klienta
Aby ustawić udostępnianie pamięci podręcznej w przepływie pracy klienta, dodaj wystąpienie SendMessageChannelCache klasy jako rozszerzenie do żądanego zestawu wystąpień przepływu pracy. Spowoduje to udostępnienie pamięci podręcznej we wszystkich wystąpieniach przepływu pracy. W poniższych przykładach kodu pokazano, jak wykonać te kroki.
Najpierw zadeklaruj wystąpienie typu SendMessageChannelCache.
// Create an instance of SendMessageChannelCache with default cache settings.
static SendMessageChannelCache sharedChannelCacheExtension =
new SendMessageChannelCache();
Następnie dodaj rozszerzenie pamięci podręcznej do każdego wystąpienia przepływu pracy klienta.
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);
Zmiana poziomu udostępniania pamięci podręcznej dla hostowanej usługi przepływu pracy
Aby ustawić udostępnianie pamięci podręcznej w hostowanej usłudze przepływu pracy, dodaj wystąpienie klasy SendMessageChannelCache jako rozszerzenie do wszystkich hostów usługi przepływu pracy. To prowadzi do współdzielenia pamięci podręcznej między wszystkimi hostami usług przepływu pracy. W poniższych przykładach kodu pokazano, jak wykonać te kroki.
Najpierw zadeklaruj wystąpienie typu SendMessageChannelCache na poziomie klasy.
// Create static instance of SendMessageChannelCache with default cache settings.
static SendMessageChannelCache sharedChannelCacheExtension = new
SendMessageChannelCache();
Następnie dodaj rozszerzenie statycznej pamięci podręcznej do każdego hosta usługi przepływu pracy.
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);
Aby ustawić udostępnianie pamięci podręcznej w usłudze hostowanego przepływu pracy na poziomie wystąpienia, dodaj Func<SendMessageChannelCache> delegata jako rozszerzenie do hosta usługi przepływu pracy i przypisz ten delegat do kodu, który tworzy nowe wystąpienie SendMessageChannelCache klasy. Spowoduje to utworzenie innej pamięci podręcznej dla każdego pojedynczego wystąpienia przepływu pracy zamiast pojedynczej pamięci podręcznej udostępnionej przez wszystkie wystąpienia przepływu pracy na hoście usługi przepływu pracy. Poniższy przykład kodu pokazuje, jak to osiągnąć przy użyciu wyrażenia lambda do bezpośredniego definiowania SendMessageChannelCache rozszerzenia, do którego wskazuje delegat.
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 },
});
Dostosowywanie ustawień pamięci podręcznej
Możesz dostosować ustawienia pamięci podręcznej dla pamięci podręcznej fabryki kanału i pamięci podręcznej kanału. Ustawienia pamięci podręcznej są zdefiniowane w klasie ChannelCacheSettings. Klasa SendMessageChannelCache definiuje domyślne ustawienia pamięci podręcznej dla pamięci podręcznej fabryki kanału i pamięci podręcznej kanału w konstruktorze bez parametrów. W poniższej tabeli wymieniono wartości domyślne tych ustawień pamięci podręcznej dla każdego typu pamięci podręcznej.
| Ustawienia | Limit czasu dzierżawy (min) | IdleTimeout (min. | MaksymalnaLiczbaElementówWCzasowejPamięci |
|---|---|---|---|
| Domyślna pamięć podręczna fabryki | TimeSpan.MaxValue | 2 | 16 |
| Domyślna pamięć podręczna kanału | 5 | 2 | 16 |
Aby dostosować ustawienia pamięci podręcznej fabryki i pamięci podręcznej kanału, utwórz wystąpienie klasy SendMessageChannelCache przy użyciu sparametryzowanego konstruktora SendMessageChannelCache i przekaż nowe wystąpienie ChannelCacheSettings z niestandardowymi wartościami do każdego z parametrów factorySettings i channelSettings. Następnie dodaj nowe wystąpienie tej klasy w formie rozszerzenia do hosta serwisu przepływu pracy lub do instancji przepływu pracy. Poniższy przykład kodu pokazuje, jak wykonać te kroki dla wystąpienia przepływu pracy.
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);
Aby włączyć buforowanie, gdy usługa przepływu pracy ma punkty końcowe zdefiniowane w konfiguracji, utwórz wystąpienie klasy SendMessageChannelCache przy użyciu sparametryzowanego konstruktora SendMessageChannelCache, ustawiając parametr allowUnsafeCaching na true. Następnie dodaj nowe wystąpienie tej klasy w formie rozszerzenia do hosta serwisu przepływu pracy lub do instancji przepływu pracy. Poniższy przykład kodu pokazuje, jak włączyć cache dla wystąpienia przepływu pracy.
SendMessageChannelCache customChannelCacheExtension =
new SendMessageChannelCache{ AllowUnsafeCaching = true };
clientInstance.Extensions.Add(customChannelCacheExtension);
Aby całkowicie wyłączyć pamięć podręczną dla fabryk kanałów i samych kanałów, należy wyłączyć pamięć podręczną fabryk kanałów. Spowoduje to również wyłączenie pamięci podręcznej kanału, ponieważ kanały są własnością odpowiednich fabryk kanałów. Aby wyłączyć pamięć podręczną fabryki kanałów, przekaż factorySettings parametr do SendMessageChannelCache konstruktora zainicjowanego jako instancja ChannelCacheSettings o wartości MaxItemsInCache równej 0. Poniższy przykład kodu pokazuje to.
// 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);
Możesz zdecydować się na użycie tylko pamięci podręcznej fabryki kanału i wyłączyć pamięć podręczną kanału, przekazując parametr channelSettings do konstruktora SendMessageChannelCache, który jest zainicjowany do wystąpienia ChannelCacheSettings o wartości MaxItemsInCache 0. Poniższy przykład kodu pokazuje to.
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);
W hostowanej usłudze przepływu pracy można określić ustawienia pamięci podręcznej fabryki i pamięci podręcznej kanału w pliku konfiguracji aplikacji. W tym celu dodaj zachowanie usługi, które zawiera ustawienia pamięci podręcznej dla pamięci podręcznej fabryki i kanału, a następnie dodaj to zachowanie usługi do usługi. Poniższy przykład przedstawia zawartość pliku konfiguracji zawierającego MyChannelCacheBehavior zachowanie usługi z ustawieniami niestandardowej pamięci podręcznej fabryki i pamięci podręcznej kanału. To zachowanie usługi jest dodawane do usługi za pośrednictwem atrybutu behaviorConfiguration .
<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>