Aracılığıyla paylaş


İleti Aktarma Akışı

Windows Communication Foundation (WCF) aktarımları, iletileri aktarmak için iki modu destekler:

  • Arabelleğe alınan aktarımlar, aktarım tamamlanana kadar iletinin tamamını bellek arabelleğinde tutar. Bir alıcının okuyabilmesi için önce arabelleğe alınan iletinin tamamen teslim edilmesi gerekir.

  • Akışlı aktarımlar iletiyi akış olarak kullanıma sunar. Alıcı, ileti tamamen teslim edilmeden önce işlemeye başlar.

  • Akışlı aktarımlar, büyük bellek arabellekleri gereksinimini ortadan kaldırarak hizmetin ölçeklenebilirliğini artırabilir. Aktarım modunun değiştirilmesinin ölçeklenebilirliği geliştirip geliştirmediği, aktarılmakta olan iletilerin boyutuna bağlıdır. Büyük ileti boyutları, akışlı aktarımları kullanmayı tercih eder.

Varsayılan olarak, HTTP, TCP/IP ve adlandırılmış kanal aktarımları arabelleğe alınan aktarımları kullanır. Bu belgede, bu aktarımların arabelleğe alınan bir aktarım modundan akışlı aktarım moduna nasıl geçirilir ve bunun sonuçları açıklanır.

Akışlı Aktarımları Etkinleştirme

Arabelleğe alınan ve akışlı aktarım modları arasında seçim, taşımanın bağlama öğesinde yapılır. Bağlama öğesinin , , StreamedStreamedRequestveya StreamedResponseolarak ayarlanabilen Bufferedbir TransferMode özelliği vardır. Aktarım modunun olarak Streamed ayarlanması, akış iletişimini her iki yönde de etkinleştirir. Aktarım modunun StreamedRequest olarak ayarlanması veya StreamedResponse akış iletişiminin yalnızca belirtilen yönde olmasını sağlar.

BasicHttpBinding, NetTcpBindingve NetNamedPipeBinding bağlamaları özelliğini kullanıma sunarTransferMode. Diğer aktarımlar için aktarım modunu ayarlamak için özel bir bağlama oluşturmanız gerekir.

Arabelleğe alınan veya akışlı aktarımları kullanma kararı, uç noktanın yerel bir kararıdır. HTTP aktarımları için aktarım modu bir bağlantı veya sunuculara ve diğer aracılara yayılmaz. Aktarım modunun ayarlanması hizmet arabiriminin açıklamasına yansıtılmaz. Bir hizmet için bir istemci sınıfı oluşturduktan sonra, modu ayarlamak üzere akış aktarımlarıyla kullanılması amaçlanan hizmetler için yapılandırma dosyasını düzenlemeniz gerekir. TCP ve adlandırılmış kanal aktarımları için aktarım modu bir ilke onayı olarak yayılır.

Kod örnekleri için bkz . Nasıl yapılır: Akışı Etkinleştirme.

Zaman Uyumsuz Akışı Etkinleştirme

Zaman uyumsuz akışı etkinleştirmek için hizmet konağına DispatcherSynchronizationBehavior uç nokta davranışını ekleyin ve özelliğini olarak trueayarlayınAsynchronousSendEnabled.

Bu WCF sürümü, gönderme tarafında gerçek zaman uyumsuz akış özelliğini de ekler. Bu, bazılarında okumanın yavaş olduğu birden çok istemciye ileti akışı yaptığı senaryolarda hizmetin ölçeklenebilirliğini artırır; büyük olasılıkla ağ tıkanıklığı nedeniyle veya hiç okumadığından. Bu senaryolarda WCF artık istemci başına hizmetteki tek tek iş parçacıklarını engellemez. Bu, hizmetin daha fazla istemci işleyebilmesini ve böylece hizmetin ölçeklenebilirliğini geliştirmesini sağlar.

Akışlı Aktarımlardaki Kısıtlamalar

Akışlı aktarım modunun kullanılması, çalışma süresinin ek kısıtlamaları zorlamasına neden olur.

Akışlı aktarımda gerçekleşen işlemlerin en fazla bir giriş veya çıkış parametresiyle bir sözleşmesi olabilir. Bu parametre iletinin tüm gövdesine karşılık gelir ve türetilmiş bir Messagetürü Streamveya bir IXmlSerializable uygulama olmalıdır. bir işlem için dönüş değerinin olması, çıkış parametresine sahip olmakla eşdeğerdir.

Güvenilir mesajlaşma, işlemler ve SOAP ileti düzeyi güvenlik gibi bazı WCF özellikleri, iletimler için iletileri arabelleğe almayı kullanır. Bu özelliklerin kullanılması, akış kullanarak elde edilen performans avantajlarını azaltabilir veya ortadan kaldırabilir. Akışlı bir aktarımın güvenliğini sağlamak için yalnızca aktarım düzeyi güvenliği kullanın veya aktarım düzeyi güvenlik ile yalnızca kimlik doğrulaması ileti güvenliğini kullanın.

Aktarım modu akışa ayarlanmış olsa bile SOAP üst bilgileri her zaman arabelleğe alınır. İletinin üst bilgileri aktarım kotasının MaxBufferSize boyutunu aşmamalıdır. Bu ayar hakkında daha fazla bilgi için bkz . Aktarım Kotaları.

Arabelleğe Alınan ve Akışa Alınan Aktarımlar Arasındaki Farklar

Aktarım modunu arabelleğe alınandan akışa alınana değiştirmek, TCP ve adlandırılmış kanal aktarımlarının yerel kanal şeklini de değiştirir. Arabelleğe alınan aktarımlar için yerel kanal şekli şeklindedir IDuplexSessionChannel. Akışlı aktarımlar için yerel kanallar ve IReplyChannelşeklindedirIRequestChannel. Bu aktarımları doğrudan kullanan mevcut bir uygulamada aktarım modunun değiştirilmesi (bir hizmet sözleşmesi aracılığıyla değil) kanal fabrikaları ve dinleyiciler için beklenen kanal şeklinin değiştirilmesini gerektirir.

Ayrıca bkz.