WCF Kolaylaştırma Özellikleri
Bu konu başlığında, WCF uygulamaları yazmayı daha basit hale getiren yeni özellikler açıklanmaktadır.
WCF'ye alternatif olarak gRPC
gRPC, WCF'ye popüler bir alternatif olan modern bir RPC çerçevesidir. gRPC, AŞAĞıDAKIler dahil olmak üzere WCF'ye göre bir dizi avantaj sağlayan HTTP/2 üzerine kurulmuştur:
- Performans: gRPC, özellikle uzun süre çalışan bağlantılar için WCF'den çok daha verimlidir.
- Ölçeklenebilirlik: gRPC, çok sayıda istemci ve sunucuya ölçeklendirilecek şekilde tasarlanmıştır.
- Güvenlik: gRPC, TLS ve kimlik doğrulaması dahil olmak üzere çeşitli güvenlik mekanizmalarını destekler.
- Platformlar arası: gRPC platformdan bağımsızdır ve çeşitli programlama dilleri ile kullanılabilir.
WCF uygulamalarını geliştirme veya gRPC'ye geçirme hakkında daha fazla bilgi için bkz:
- WCF geliştiricileri için gRPC'yi neden öneririz?
- WCF ile gRPC karşılaştırması
- WCF geliştiricileri için gRPC'ye giriş
Basitleştirilmiş Oluşturulan Yapılandırma Dosyaları
Visual Studio'da bir hizmet başvurusu eklediğinizde veya SvcUtil.exe aracını kullandığınızda bir istemci yapılandırma dosyası oluşturulur. WCF'nin önceki sürümlerinde bu yapılandırma dosyaları, değeri varsayılan değer olsa bile her bağlama özelliğinin değerini içeriyordu. WCF 4.5'te oluşturulan yapılandırma dosyaları yalnızca varsayılan olmayan bir değere ayarlanmış bağlama özelliklerini içerir.
Aşağıda WCF 3.0 tarafından oluşturulan bir yapılandırma dosyası örneği verilmiştir.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
allowCookies="false" bypassProxyOnLocal="false"
hostNameComparisonMode="StrongWildcard" maxBufferSize="65536"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
Aşağıda WCF 4.5 tarafından oluşturulan aynı yapılandırma dosyasının bir örneği verilmiştir.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" />
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:36906/Service1.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_IService1" contract="IService1"
name="BasicHttpBinding_IService1" />
</client>
</system.serviceModel>
</configuration>
Sözleşme öncelikli geliştirme
WCF artık sözleşme öncelikli geliştirme desteğine sahiptir. svcutil.exe aracı, bir WSDL belgesinden hizmet ve veri sözleşmeleri oluşturmanıza olanak tanıyan bir /serviceContract anahtarına sahiptir.
Taşınabilir Alt Küme Projesinden Hizmet Başvurusu Ekleme
Taşınabilir alt küme projeleri, .NET derleme programcılarının tek bir kaynak ağacını ve derleme sistemini korumasını sağlarken aynı anda birden çok .NET uygulamasını (masaüstü, Silverlight, Windows Telefon ve Xbox) desteklemeye devam eder. Taşınabilir alt küme projeleri yalnızca herhangi bir .NET uygulamasında kullanılabilecek derlemeler olan .NET taşınabilir kitaplıklarına başvurur. Geliştirici deneyimi, başka bir WCF istemci uygulamasına hizmet başvurusu eklemekle aynıdır. Daha fazla bilgi için bkz . Taşınabilir Alt Küme Projesinde Hizmet Başvurusu Ekleme.
ASP.NET Uyumluluk Modu Varsayılan Olarak Değiştirildi
WCF, wcf hizmetleri yazarken geliştiricilere ASP.NET HTTP işlem hattındaki özelliklere tam erişim vermek için ASP.NET uyumluluk modu sağlar. Bu modu kullanmak için web.config dosyasının aspNetCompatibilityEnabled
<serviceHostingEnvironment> bölümünde özniteliğini true olarak ayarlamanız gerekir. Ayrıca, bu appDomain içindeki herhangi bir hizmetin veya Requiredolarak ayarlanmış özelliğine AllowedAspNetCompatibilityRequirementsAttribute sahip RequirementsMode
olması gerekir. Varsayılan olarak AspNetCompatibilityRequirementsAttribute artık olarak Allowed ayarlanır ve varsayılan WCF hizmet uygulaması şablonu özniteliğini aspNetCompatibilityEnabled
olarak true
ayarlar. Daha fazla bilgi için bkz . Windows Communication Foundation 4.5 ve WCF Hizmetleri ve ASP.NET'deki Yenilikler.
Akış Geliştirmeleri
WCF'ye zaman uyumsuz akış için yeni destek eklendi. Zaman uyumsuz akışı etkinleştirmek için hizmet konağına DispatcherSynchronizationBehavior uç nokta davranışını ekleyin ve özelliğini olarak
true
ayarlayınAsynchronousSendEnabled. Bu, bir hizmet akışlı iletileri yavaş okuyan birden çok istemciye gönderirken ölçeklenebilirlik sağlayabilir. WCF artık istemci başına bir iş parçacığını engellemez ve başka bir istemciye hizmet vermek için iş parçacığını serbest bırakın.Bir hizmet IIS barındırıldığında iletilerin arabelleğe alınmasıyla ilgili sınırlamalar kaldırıldı. WCF'nin önceki sürümlerinde, akış iletisi aktarımını kullanan IIS tarafından barındırılan bir hizmet için bir ileti alınırken, ASP.NET tüm iletiyi WCF'ye göndermeden önce arabelleğe alıyordu. Bu, büyük bellek tüketimine neden olabilir. Bu arabelleğe alma .NET Framework 4.5'te kaldırılmıştır ve artık IIS tarafından barındırılan WCF hizmetleri iletinin tamamı alınmadan önce gelen akışı işlemeye başlayabilir ve böylece gerçek akış etkinleştirilebilir. Bu, WCF'nin iletilere hemen yanıt vermesini sağlar ve gelişmiş performans sağlar. Ayrıca, artık gelen isteklerde ASP.NET boyut sınırı için
maxRequestLength
bir değer belirtmeniz gerekmez. Bu özellik ayarlanırsa yoksayılır. HakkındamaxRequestLength
daha fazla bilgi için bkz <. httpRuntime> yapılandırma öğesi. maxAllowedContentLength değerini yapılandırmanız gerekir. Daha fazla bilgi için bkz . IIS İstek Sınırları.
Yeni Aktarım Varsayılan Değerleri
Aşağıdaki tabloda değiştirilen ayarlar ve ek bilgilerin nerede bulunacağı açıklanmaktadır.
Özellik | Açık | Yeni Varsayılan | Daha Fazla Bilgi |
---|---|---|---|
channelInitializationTimeout | NetTcpBinding | 30 saniye | Bu özellik, bir TCP bağlantısının .NET Çerçeve protokolünü kullanarak kimliğini doğrulamasının ne kadar sürebileceğini belirler. Sunucunun kimlik doğrulaması gerçekleştirmek için yeterli bilgiye sahip olması için istemcinin bazı ilk verileri göndermesi gerekir. Bu zaman aşımı, kötü amaçlı kimliği doğrulanmamış istemcilerin sunucuya bağlı bağlantıları uzun süre tutmaması için kasıtlı olarak ReceiveTimeout'tan (10 dk) küçük hale getirilir. Varsayılan değer 30 saniyedir. Hakkında daha fazla bilgi için ChannelInitializationTimeout |
Listenbacklog | NetTcpBinding | 16 * işlemci sayısı | Bu yuva düzeyi özelliği, kuyruğa alınması gereken "beklemedeki kabul" isteklerinin sayısını açıklar. Dinleme kapsamı kuyruğu dolarsa, yeni yuva istekleri reddedilir. Hakkında daha fazla bilgi için ListenBacklog |
maxPendingAccepts | ConnectionOrientedTransportBindingElement SMSvcHost.exe |
Taşıma için 2 * işlemci sayısı SMSvcHost.exe için 4 * işlemci sayısı |
Bu özellik, sunucunun dinleyicide bekleyebileceği kanal sayısını sınırlar. MaxPendingAccepts çok düşük olduğunda, tüm bekleme kanallarının bağlantılara hizmet verme işlemine başladığı ancak yeni kanalların dinlemeye başlamadığı küçük bir zaman aralığı olacaktır. Bağlantı bu aralıkta gelebilir ve sunucuda bekleyen hiçbir şey olmadığından başarısız olur. Bu özellik, özelliği daha büyük bir sayıya MaxPendingConnections ayarlanarak yapılandırılabilir. Daha fazla bilgi için bkz MaxPendingAccepts . ve Net.TCP Bağlantı Noktası Paylaşım Hizmetini Yapılandırma |
maxPending Bağlan ions | ConnectionOrientedTransportBindingElement | 12 * işlemci sayısı | Bu özellik, bir aktarımın kabul ettiği ancak ServiceModel Dağıtıcısı tarafından alınmadığı kaç bağlantı olduğunu denetler. Bu değeri ayarlamak için bağlamada veya maxOutboundConnectionsPerEndpoint bağlama öğesinde kullanınMaxConnections . Hakkında daha fazla bilgi için MaxPendingConnections |
receiveTimeout | SMSvcHost.exe | 30 saniye | Bu özellik, TCP çerçeve verilerini okumak ve temel alınan bağlantılardan bağlantı dağıtımı gerçekleştirmek için zaman aşımını belirtir. Bu, hizmetin gelen bağlantıdan önceden oluşturulmuş verileri okumak için meşgul tutulması SMSvcHost.exe süreye bir sınır koymak için vardır. Daha fazla bilgi için bkz . Net.TCP Bağlantı Noktası Paylaşım Hizmetini Yapılandırma. |
Not
Bu yeni varsayılanlar yalnızca WCF hizmetini .NET Framework 4.5 yüklü bir makineye dağıttığınızda kullanılır. .NET Framework 4.0 ile bir makinede aynı hizmeti dağıtırsanız, .NET Framework 4.0 varsayılanları kullanılır. Böyle durumlarda bu ayarların açıkça yapılandırılması önerilir.
XmlDictionaryReaderQuotas
XmlDictionaryReaderQuotas , bir kodlayıcı tarafından ileti oluşturulurken kullanılan bellek miktarını sınırlayan XML sözlük okuyucuları için yapılandırılabilir kota değerleri içerir. Bu kotalar yapılandırılabilir olsa da, bir geliştiricinin bunları açıkça ayarlaması gerekme olasılığını azaltacak şekilde varsayılan değerler değişmiştir. MaxReceivedMessageSize
kotası değiştirilmedi, böylece bellek tüketimini sınırlayarak karmaşıklığıyla ilgilenme gereksinimini önleyebileceğinden XmlDictionaryReaderQuotas. Aşağıdaki tabloda kotalar, yeni varsayılan değerleri ve her kotanın ne için kullanıldığına ilişkin kısa bir açıklama gösterilmektedir.
Kota Adı | Varsayılan Değer | Açıklama |
---|---|---|
MaxArrayLength | Maxvalue | İzin verilen en fazla dizi uzunluğunu alır ve ayarlar. Bu kota, bayt dizileri de dahil olmak üzere XML okuyucusunun döndürdüğü temel öğe dizisinin en büyük boyutunu sınırlar. Bu kota, XML okuyucunun kendisinde değil, okuyucuyu kullanan bileşende bellek tüketimini sınırlamaz. Örneğin, ile MaxArrayLengthgüvenli bir okuyucu kullandığındaDataContractSerializer, bu kotadan daha büyük bayt dizilerinin seri durumdan çıkarılmaz. |
MaxBytesPerRead | Maxvalue | Her okuma için döndürülen izin verilen bayt üst sınırını alır ve ayarlar. Bu kota, öğe başlangıç etiketini ve özniteliklerini okurken tek bir Okuma işleminde okunan bayt sayısını sınırlar. (Akışsız durumlarda, öğe adının kendisi kotaya göre sayılmaz). Öznitelik adlarının benzersiz olup olmadığı denetlenmesi gerektiğinden, çok fazla XML özniteliğine sahip olmak orantısız işlem süresini kullanabilir. MaxBytesPerRead bu tehdidi azaltır. |
MaxDepth | 128 düğüm derin | Bu kota, XML öğelerinin iç içe yerleştirme derinliği üst sınırını sınırlar. MaxDepth ile MaxBytesPerReadetkileşim kurar: Okuyucu, geçerli öğe ve tüm üst öğeleri için verileri her zaman bellekte tutar, bu nedenle okuyucunun en fazla bellek tüketimi bu iki ayarın çarpımıyla orantılıdır. İç içe bir nesne grafiğinin seri durumdan çıkarılması sırasında seri durumdan çıkarıcı yığının tamamına erişmek ve kurtarılamaz StackOverflowExceptionbir oluşturmak zorunda kalır. HEM hem de için XML iç içe yerleştirme ve nesne iç içe yerleştirme arasında doğrudan bir bağıntı DataContractSerializerXmlSerializervardır. MaxDepth bu tehdidi azaltmak için kullanılır. |
MaxNameTableCharCount | Maxvalue | Bu kota, bir ad tablosuna izin verilen en fazla karakter sayısını sınırlar. Ad tablosu, xml belgesi işlenirken karşılaşılan belirli dizeleri (ad alanları ve ön ekler gibi) içerir. Bu dizeler bellekte arabelleğe alındığından, akış beklendiğinde aşırı arabelleğe almayı önlemek için bu kota kullanılır. |
MaxStringContentLength | Maxvalue | Bu kota, XML okuyucusunun döndürdüğü en büyük dize boyutunu sınırlar. Bu kota, XML okuyucunun kendisinde değil, okuyucuyu kullanan bileşende bellek tüketimini sınırlamaz. Örneğin, ile MaxStringContentLengthgüvenliği sağlanan bir okuyucu kullandığındaDataContractSerializer, bu kotadan daha büyük dizeleri seri durumdan çıkarmaz. |
Önemli
Verilerinizin güvenliğini sağlama hakkında daha fazla bilgi için Veriler için Güvenlik Konuları'nın altında "XML Kasa kullanma" konusuna bakın.
Not
Bu yeni varsayılanlar yalnızca WCF hizmetini .NET Framework 4.5 yüklü bir makineye dağıttığınızda kullanılır. .NET Framework 4.0 ile bir makinede aynı hizmeti dağıtırsanız, .NET Framework 4.0 varsayılanları kullanılır. Böyle durumlarda bu ayarların açıkça yapılandırılması önerilir.
WCF Yapılandırma Doğrulaması
Visual Studio'da derleme işleminin bir parçası olarak, WCF yapılandırma dosyaları artık doğrulanır. Doğrulama başarısız olursa Visual Studio'da doğrulama hatalarının veya uyarılarının listesi görüntülenir.
XML Düzenleyicisi Araç İpuçları
Yeni ve mevcut WCF hizmeti geliştiricilerinin hizmetlerini yapılandırmalarına yardımcı olmak için, Visual Studio XML düzenleyicisi artık hizmet yapılandırma dosyasının parçası olan her yapılandırma öğesi ve özellikleri için araç ipuçları sağlar.
TemelHttpBinding Geliştirmeleri
Tek bir WCF uç noktasının farklı kimlik doğrulama modlarına yanıt vermesini sağlar.
WCF hizmetinin güvenlik ayarlarının IIS tarafından denetlenmesini sağlar