Kaynak Tüketimini Denetleme ve Performansı Geliştirme
Bu konu başlığında, Kaynak tüketimini denetlemek ve performans ölçümlerini etkilemek için çalışan Windows Communication Foundation (WCF) mimarisinin farklı alanlarındaki çeşitli özellikler açıklanmaktadır.
WCF'de Kaynak Tüketimini Kısıtlayan Özellikler
Windows Communication Foundation (WCF), güvenlik veya performans amacıyla belirli işlem türlerine kısıtlamalar uygular. Bu kısıtlamalar, kotalar ve azaltmalar gibi iki ana biçimde gelir. Kotalar , ulaşıldığında veya aşıldığında sistemin bir noktasında hemen özel durum tetikleyen sınırlardır. Azaltmalar , hemen bir özel durumun atılması için neden olmayan sınırlardır. Bunun yerine, bir kısıtlama sınırına ulaşıldığında işleme devam eder ancak bu kısıtlama değeri tarafından belirlenen sınırlar içinde gerçekleşir. Bu sınırlı işlem başka bir yerde özel durum tetikleyebilir, ancak bu uygulamaya bağlıdır.
Kotalar ve azaltmalar arasındaki ayrıma ek olarak, bazı kısıtlayan özellikler serileştirme düzeyinde, bazıları aktarım düzeyinde ve bazıları uygulama düzeyinde bulunur. Örneğin, sistem tarafından sağlanan tüm aktarım bağlama öğeleri tarafından uygulanan kota TransportBindingElement.MaxReceivedMessageSize, kötü amaçlı istemcilerin aşırı bellek tüketimine neden olarak bir hizmete yönelik hizmet reddi saldırılarına girişmelerini engellemek için varsayılan olarak 65.536 bayt olarak ayarlanır. (Genellikle bu değeri düşürerek performansı artırabilirsiniz.)
Serileştirme kotasının bir örneği, seri hale getiricinin DataContractSerializer.MaxItemsInObjectGraph tek ReadObject bir yöntem çağrısında seri hale getirdiği veya seri durumdan çıkardığı en fazla nesne sayısını belirten özelliğidir. Uygulama düzeyinde azaltmaya örnek olarak ServiceThrottle.MaxConcurrentSessions , varsayılan olarak eş zamanlı oturumlu kanal bağlantısı sayısını 10 ile kısıtlayan özelliği örnek olarak verilmiştir. (Kotalardan farklı olarak, bu kısıtlama değerine ulaşılırsa uygulama işlemeye devam eder ancak yeni oturum açan kanal kabul etmediğinden, oturum açan kanallardan biri sona erene kadar yeni istemciler bağlanamaz.)
Bu denetimler, belirli saldırı türlerine karşı kullanıma hazır bir azaltma sağlamak veya bellek ayak izi, başlangıç süresi gibi performans ölçümlerini geliştirmek için tasarlanmıştır. Ancak, uygulamaya bağlı olarak, bu denetimler hizmet uygulaması performansını engelleyebilir veya uygulamanın çalışmasını engelleyebilir. Örneğin, video akışı yapmak için tasarlanmış bir uygulama varsayılan TransportBindingElement.MaxReceivedMessageSize özelliği kolayca aşabilir. Bu konu, WCF'nin tüm düzeylerindeki uygulamalara uygulanan çeşitli denetimlere genel bir bakış sağlar, bir ayarın uygulamanızı engelleyip engellemediği hakkında daha fazla bilgi edinmenin çeşitli yollarını açıklar ve çeşitli sorunları düzeltmenin yollarını açıklar. Çoğu kısıtlama ve bazı kotalar, temel özellik bir serileştirme veya aktarım kısıtlaması olsa bile uygulama düzeyinde kullanılabilir. Örneğin, hizmet sınıfındaki DataContractSerializer.MaxItemsInObjectGraph özelliğini kullanarak ServiceBehaviorAttribute.MaxItemsInObjectGraph özelliğini ayarlayabilirsiniz.
Not
Belirli bir sorununuz varsa, sorununuzun (ve çözümün ) burada listelenip listelenmediğini görmek için önce WCF Sorun Giderme Hızlı Başlangıcı'nı okumanız gerekir.
Serileştirme işlemlerini kısıtlayan özellikler, Veriler için Güvenlik Konuları'nda listelenir. Taşımalarla ilgili kaynakların tüketimini kısıtlayan özellikler Aktarım Kotaları'nda listelenir. Uygulama katmanındaki kaynakların tüketimini kısıtlayan özellikler sınıfın ServiceThrottle üyeleridir.
Kota Ayarlar ile İlgili Uygulama ve Performans Sorunlarını Algılama
Yaygın güvenlik sorunlarına karşı temel koruma sağlarken, çok çeşitli uygulama türlerinde temel uygulama işlevselliğini etkinleştirmek için önceki değerlerin varsayılanları seçilmiştir. Ancak, farklı uygulama tasarımları bir veya daha fazla azaltma ayarlarını aşabilir, ancak aksi takdirde uygulama güvenlidir ve tasarlandığı gibi çalışır. Böyle durumlarda, hangi kısıtlama değerlerinin aşıldığını ve hangi düzeyde aşıldığını belirlemeniz ve uygulama aktarım hızını artırmak için uygun eylem seyrini belirlemeniz gerekir.
Genellikle, uygulamayı yazarken ve hata ayıklarken, yapılandırma dosyasında veya program aracılığıyla özelliğini true
olarak ayarlarsınızServiceDebugBehavior.IncludeExceptionDetailInFaults. Bu, WCF'ye hizmet özel durum yığını izlemelerini görüntülemek üzere istemci uygulamasına döndürmesini sağlar. Bu özellik, uygulama düzeyindeki özel durumların çoğunu, sorun buysa hangi kota ayarlarının söz konusu olabileceğini gösterecek şekilde bildirir.
Bazı özel durumlar, uygulama katmanının görünürlüğünün altında çalışma zamanında gerçekleşir ve bu mekanizma kullanılarak döndürülmeyebilir ve özel System.ServiceModel.Dispatcher.IErrorHandler bir uygulama tarafından işlenmeyebilir. Microsoft Visual Studio gibi bir geliştirme ortamındaysanız, bu özel durumların çoğu otomatik olarak görüntülenir. Ancak, Just My Code Visual Studio gibi geliştirme ortamı ayarları bazı özel durumlar maskelenebilir.
Geliştirme ortamınızın özelliklerinden bağımsız olarak, tüm özel durumların hatalarını ayıklamak ve uygulamalarınızın performansını ayarlamak için WCF izleme ve ileti günlüğü özelliklerini kullanabilirsiniz. Daha fazla bilgi için bkz . Uygulamanızın Sorunlarını Gidermek için İzlemeyi Kullanma.
Performans Sorunları ve XmlSerializer
Çalışma zamanında bu veri türleri için seri hale getirme ve derleme kodunu kullanarak XmlSerializer seri hale getirilebilen veri türlerini kullanan hizmetler ve istemci uygulamaları, yavaş başlatma performansına neden olabilir.
Not
Önceden oluşturulmuş serileştirme kodu hizmetlerde değil yalnızca istemci uygulamalarında kullanılabilir.
ServiceModel Meta Veri Yardımcı Programı Aracı (Svcutil.exe), uygulama için derlenmiş derlemelerden gerekli serileştirme kodunu oluşturarak bu uygulamalar için başlatma performansını geliştirebilir. Daha fazla bilgi için bkz . Nasıl yapılır: XmlSerializer kullanarak WCF İstemci Uygulamalarının Başlangıç Süresini Geliştirme.
wcf hizmetlerini ASP.NET altında barındırırken karşılaşılan performans sorunları
WCF hizmeti IIS ve ASP.NET altında barındırıldığında, IIS ve ASP.NET yapılandırma ayarları WCF hizmetinin aktarım hızını ve bellek ayak izini etkileyebilir. ASP.NET performansı hakkında daha fazla bilgi için bkz . ASP.NET Performansını Geliştirme. İstenmeyen sonuçları olabilecek bir ayar, MinWorkerThreadsöğesinin ProcessModelSectionözelliği olan ayarıdır. Uygulamanızın sabit veya az sayıda istemcisi varsa, 2 olarak ayarlanması MinWorkerThreads CPU kullanımı %100'e yakın olan çok işlemcili bir makinede aktarım hızı artışı sağlayabilir. Performanstaki bu artış bir maliyetle birlikte gelir: Bellek kullanımında da artışa neden olur ve bu da ölçeklenebilirliği azaltabilir.