Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
WCF istemci uygulamaları, ChannelFactory<TChannel> wcf hizmetiyle iletişim kanalı oluşturmak için sınıfını kullanır. "ChannelFactory<TChannel> örnekleri oluşturmak, aşağıdaki işlemleri içerdiğinden bazı ek yüklere neden olur:"
ContractDescription ağacını oluşturmak
Tüm gerekli CLR türlerini yansıtma
Kanal yığınını oluşturma
Kaynakları yok etme
Bu ek yükü en aza indirmeye yardımcı olmak için WCF, bir WCF istemci proxy'si kullanırken kanal fabrikalarını önbelleğe alabilir.
Tavsiye
ChannelFactory<TChannel> sınıfını doğrudan kullandığınızda, kanal fabrikasını oluşturma üzerinde doğrudan kontrolünüz vardır.
ServiceModel Meta Veri Yardımcı Programı (Svcutil.exe) ile oluşturulan WCF istemci proxy'leri ClientBase<TChannel>'den türetilir.
ClientBase<TChannel> kanal fabrikası önbelleğe alma davranışını tanımlayan statik CacheSetting bir özellik tanımlar. Önbellek ayarları belirli bir tür için yapılır. Örneğin, ClientBase<ITest>.CacheSettings
aşağıda tanımlanan değerlerden birine ayarlandığında, yalnızca türündeki ITest
ara sunucu/ClientBase'i etkileyecektir. Belirli bir ClientBase<TChannel> için önbellek ayarı, ilk proxy/ClientBase örneği oluşturulduğunda değişmez hâle gelir.
Önbelleğe Alma Davranışını Belirtme
Önbelleğe alma davranışı, özelliği aşağıdaki değerlerden birine ayarlanarak CacheSetting belirtilir.
Önbellek Ayarı Değeri | Açıklama |
---|---|
AlwaysOn | Uygulama etki alanı içindeki tüm örnekleri ClientBase<TChannel> önbelleğe alma işlemine katılabilir. Geliştirici, önbelleğe alma işleminin herhangi bir olumsuz güvenlik etkisi olmadığını belirledi. Üzerindeki "güvenlik duyarlı" özelliklere ClientBase<TChannel> erişilse bile önbelleğe alma kapatılmaz. "‘Güvenlik açısından hassas’ özellikleri ClientBase<TChannel>, ClientCredentials, Endpoint ve ChannelFactory şeklindedir." |
Default | Yalnızca yapılandırma dosyalarında tanımlanan uç noktalardan oluşturulan ClientBase<TChannel> örnekleri, uygulama etki alanı içinde önbelleğe alma işlemine katılır. ClientBase<TChannel> uygulama etki alanı içinde programatik olarak oluşturulan herhangi bir örnek, önbelleğe alma işlemine katılmaz. Ayrıca, ClientBase<TChannel> örneğinde "güvenlik açısından hassas" özelliklerden herhangi birine erişildiğinde önbelleğe alma devre dışı bırakılır. |
AlwaysOff | Söz konusu uygulama etki alanı içindeki belirli bir türün tüm ClientBase<TChannel> örnekleri için önbelleğe alma kapalıdır. |
Aşağıdaki kod parçacıkları özelliğinin CacheSetting nasıl kullanılacağını göstermektedir.
class Program
{
static void Main(string[] args)
{
ClientBase<ITest>.CacheSettings = CacheSettings.AlwaysOn;
foreach (string msg in messages)
{
using (TestClient proxy = new TestClient (new BasicHttpBinding(), new EndpointAddress(address)))
{
// ...
proxy.Test(msg);
// ...
}
}
}
}
// Generated by SvcUtil.exe
public partial class TestClient : System.ServiceModel.ClientBase, ITest { }
Yukarıdaki kodda, TestClient
içinde tüm örnekler aynı kanal fabrikasını kullanır.
class Program
{
static void Main(string[] args)
{
ClientBase<ITest>.CacheSettings = CacheSettings.Default;
int i = 1;
foreach (string msg in messages)
{
using (TestClient proxy = new TestClient ("MyEndpoint", new EndpointAddress(address)))
{
if (i == 4)
{
ServiceEndpoint endpoint = proxy.Endpoint;
... // use endpoint in some way
}
proxy.Test(msg);
}
i++;
}
}
// Generated by SvcUtil.exe
public partial class TestClient : System.ServiceModel.ClientBase, ITest {}
Yukarıdaki örnekte, örnek #4 hariç, tüm TestClient
örnekleri aynı kanal fabrikasını kullanır. Örnek #4, kullanımı için özel olarak oluşturulmuş bir kanal fabrikası kullanır. Bu ayar, belirli bir uç noktanın aynı kanal fabrika türündeki diğer uç noktalardan (bu örnekte ITest
) farklı güvenlik ayarlarına ihtiyaç duyduğu senaryolar için çalışır.
class Program
{
static void Main(string[] args)
{
ClientBase<ITest>.CacheSettings = CacheSettings.AlwaysOff;
foreach (string msg in messages)
{
using (TestClient proxy = new TestClient ("MyEndpoint", new EndpointAddress(address)))
{
proxy.Test(msg);
}
}
}
}
// Generated by SvcUtil.exe
public partial class TestClient : System.ServiceModel.ClientBase, ITest {}
Yukarıdaki örnekte, tüm TestClient
örnekleri farklı kanal fabrikalarını kullanır. Bu, her uç noktanın farklı güvenlik gereksinimleri olduğunda ve önbelleğe almak mantıklı olmadığında kullanışlıdır.