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.
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>
Contract-First Geliştirme
WCF artık sözleşme öncelikli geliştirme desteğine sahiptir. svcutil.exe aracının bir WSDL belgesinden hizmet ve veri sözleşmeleri oluşturmanıza olanak tanıyan bir /serviceContract anahtarı vardır.
Taşınabilir Alt Küme Projesinden Hizmet Referansı Ekleme
Taşınabilir alt küme projeleri, .NET derleme programcılarının tek bir kaynak ağacı ve derleme sistemini korumasını sağlarken aynı anda birden çok .NET uygulamasını (masaüstü, Silverlight, Windows Phone 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 özniteliğini aspNetCompatibilityEnabled web.configserviceHostingEnvironment< bölümünde true> olarak ayarlamanız gerekir. Ayrıca, bu appDomain içindeki herhangi bir hizmetin veya RequirementsModeolarak ayarlanmış özelliğine AspNetCompatibilityRequirementsAttributeAllowed sahip Required olması gerekir. Varsayılan olarak AspNetCompatibilityRequirementsAttribute şimdi Allowed olarak ayarlanır ve varsayılan WCF hizmet uygulaması şablonu aspNetCompatibilityEnabled özniteliğini true olarak 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 AsynchronousSendEnabled özelliğini
trueolarak ayarlayın. 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 iş parçacığını başka bir istemciye hizmet vermesi için serbest bırakır.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 tampon mekanizması .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, bu sayede gerçek zamanlı akış etkinleştirilir. 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
maxRequestLengthbir değer belirtmeniz gerekmez. Bu özellik ayarlandığında göz ardı edilir. HakkındamaxRequestLengthdaha 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 Taşıma Varsayılan Değerleri
Aşağıdaki tabloda değiştirilen ayarlar ve ek bilgilerin nerede bulunacağı açıklanmaktadır.
| Mülkiyet | Hakkında | Yeni Varsayılan | Daha Fazla Bilgi |
|---|---|---|---|
| kanalBaşlatmaZamanAşımı | 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 |
| yorumlama listesi | 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 kuyruğu dolarsa, yeni soket istekleri reddedilir. Hakkında daha fazla bilgi için ListenBacklog |
| maxPendingAccepts (Beklenen Kabul Sayısı Maksimumu) | ConnectionOrientedTransportBindingElement (Bağlantı Yönelimli Taşıma Bağlama Öğesi) 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, MaxPendingConnections özelliği daha büyük bir sayıya ayarlanarak yapılandırılabilir. Daha fazla bilgi için bkz MaxPendingAccepts. ve Net.TCP Bağlantı Noktası Paylaşım Hizmetini Yapılandırma |
| maxPendingConnections | ConnectionOrientedTransportBindingElement | 12 * işlemci sayısı | Bu özellik, bir aktarımın kabul ettiği ancak ServiceModel Dağıtıcısı tarafından henüz alınmamış olan bağlantıların sayısını denetler. Bu değeri ayarlamak için MaxConnections bağlamada veya maxOutboundConnectionsPerEndpoint bağlama öğesinde kullanın. 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, SMSvcHost.exe hizmetinin gelen bir bağlantıdan ön veriyi okuma süresine bir sınır koymak amacını taşır. Daha fazla bilgi için bkz. Net.TCP Bağlantı Noktası Paylaşım Hizmetini Yapılandırma. |
Uyarı
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ırlamaya devam ederek, sizin XmlDictionaryReaderQuotas karmaşıklığıyla ilgilenmek zorunda kalmanızı önleyebilir. 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 | Int32.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, DataContractSerializerMaxArrayLength ile güvenli bir okuyucu kullandığında, bu kotadan daha büyük bayt dizilerini seri durumdan çıkarmaz. |
| MaxBytesPerRead | Int32.MaxValue | Okuma başına döndürülen izin verilen maksimum bayt sayısı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 derinliğinde | 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 geçmiş bir nesne grafiği seri durumundan çıkarılırken, seri durumdan çıkartıcı tüm yığına erişmek ve kurtarılamaz bir StackOverflowException ortaya çıkarmak zorunda kalır. XML iç içe geçişi ve nesne iç içe geçişi arasında, gerek DataContractSerializer gerekse XmlSerializer için doğrudan bir bağıntı vardır. MaxDepth bu tehdidi azaltmak için kullanılır. |
| MaxNameTableCharCount | Int32.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. Veri akışı beklenirken dizeler bellekte arabelleğe alındığından, aşırı arabelleğe almayı önlemek için bu kota kullanılır. |
| MaxStringContentLength | Int32.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, DataContractSerializer bir okuyucu, MaxStringContentLength ile güvence altına alındığında, bu kotadan daha büyük dizeleri seri hale getirmez. |
Ö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'yi Güvenli Bir Şekilde Kullanma" konusuna bakın.
Uyarı
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