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:

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 trueayarlar. 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 trueayarlayı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 maxRequestLengthbir değer belirtmeniz gerekmez. Bu özellik ayarlanırsa yoksayılır. Hakkında maxRequestLength 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

  1. Tek bir WCF uç noktasının farklı kimlik doğrulama modlarına yanıt vermesini sağlar.

  2. WCF hizmetinin güvenlik ayarlarının IIS tarafından denetlenmesini sağlar