Aracılığıyla paylaş


WCF'de kuyruğa alma

Bu bölümde, Windows Communication Foundation'da (WCF) kuyruğa alınmış iletişimin nasıl kullanılacağı açıklanmaktadır.

WCF taşıma bağlamı olarak kuyruklar

WCF'de sözleşmeler neyin değiştirildiğini belirtir. Sözleşmeler, işletmeye veya uygulamaya özgü ileti alışverişleridir. İleti alışverişi için kullanılan mekanizma (veya "nasıl") bağlamalarda belirtilir. WCF'deki bağlamalar, ileti değişiminin ayrıntılarını kapsüller. Kullanıcının, bağlamaların temsil ettikleri aktarım veya protokolün çeşitli yönlerini denetlemesi için yapılandırma düğmelerini kullanıma sunar. WCF'de kuyruğa alma, birçok kuyruğa alma uygulaması için büyük bir avantaj olan diğer aktarım bağlamaları gibi ele alınıyor. Günümüzde birçok kuyruğa alma uygulaması diğer uzak yordam çağrısı (RPC) stilindeki dağıtılmış uygulamalardan farklı yazılarak takip ve bakım işlemleri daha zor hale getiriliyor. WCF ile, dağıtılmış bir uygulama yazmanın stili çok daha aynıdır ve bu da takip ve bakımı kolaylaştırır. Ayrıca, değişim mekanizmasını iş mantığından ayrı olarak ekleyerek, uygulamaya özgü kodu etkilemeden taşımayı yapılandırmak veya değişiklik yapmak daha kolaydır. Aşağıdaki şekilde, MSMQ'yu aktarım olarak kullanan bir WCF hizmetinin ve istemcisinin yapısı gösterilmektedir.

Kuyruğa Alınan Uygulama Diyagramı

Yukarıdaki şekilde görebileceğiniz gibi, istemci ve hizmet yalnızca uygulama semantiğini, yani sözleşmeyi ve uygulamayı tanımlamalıdır. Hizmet, tercih edilen ayarlarla kuyrukta bekleyen bir bağlama yapılandırıyor. İstemci, hizmete bir WCF istemcisi oluşturmak ve hizmete ileti göndermek için kullanılacak bağlamaları açıklayan bir yapılandırma dosyası oluşturmak için ServiceModel Meta Veri Yardımcı Programı Aracı'nı (Svcutil.exe) kullanır. Bu nedenle, kuyruğa alınmış bir ileti göndermek için istemci bir WCF istemcisi oluşturur ve üzerinde bir işlem çağırır. Bu, iletinin iletim kuyruğuna gönderilmesine ve hedef kuyruğa aktarılmasına neden olur. Kuyruğa alınan iletişimin tüm karmaşıklıkları, ileti gönderen ve alan uygulamadan gizlenir.

WCF'de kuyruğa alınan bağlantıyla ilgili uyarılar şunlardır:

  • WCF'deki varsayılan kuyruğa alınmış bağlama, kuyrukları kullanarak çift yönlü iletişimi desteklemediği için tüm hizmet işlemleri tek yönlü olmalıdır. İki yönlü iletişim örneği (Two-Way İletişim), kuyrukları kullanarak çift yönlü iletişim uygulamak için iki tek yönlü sözleşmenin nasıl kullanılacağını gösterir.

  • Meta veri alışverişini kullanarak WCF İstemcisi oluşturmak için, hizmette ek bir HTTP uç noktası gerekir. Bu uç nokta, doğrudan sorgulanarak WCF İstemcisi'nin oluşturulmasının yanı sıra, kuyruğa alınmış iletişimi uygun şekilde yapılandırmak için gereken bağlama bilgilerini elde etmek amacıyla kullanılır.

  • Kuyruğa alınmış bağlamaya dayalı olarak, WCF dışındaki ek yapılandırmalar gereklidir. Örneğin, WCF ile birlikte gelen sınıf, NetMsmqBinding bağlamaları yapılandırmanızı ve Message Queuing'i (MSMQ) en az düzeyde yapılandırmanızı gerektirir.

Aşağıdaki bölümlerde, MSMQ'yu temel alan, WCF ile sevk edilen kuyruklu bağlamalar açıklanmaktadır.

Microsoft Mesaj Sıralama Sistemi (MSMQ)

WCF'deki kuyruğa alınan aktarım, kuyruğa alınan iletişim için MSMQ kullanır.

MSMQ, Windows ile isteğe bağlı bir bileşen olarak birlikte ve NT hizmeti olarak çalışır. İletim kuyruğunda iletmek ve hedef kuyrukta teslim etmek için mesajları toplar. MSMQ kuyruk yöneticileri, iletilerin iletim sırasında kaybolmaması için güvenilir bir ileti aktarım protokolü uygular. Protokol, SOAP Reliable Message Protocol (SRMP) gibi yerel veya SOAP tabanlı olabilir.

MSMQ'da kuyruklar işlemsel veya işlem dışı olabilir. İşlem kuyruğu, iletilerin bir işlemde yakalanıp teslim edilmesini ve ardından kuyrukta sabit bir şekilde depolanmasını sağlar. İşlem kuyruğuna gönderilen iletiler, sırayla tam olarak bir kez iletilir. Hem geçici hem de dayanıklı iletiler göndermek için işlemsel olmayan bir kuyruk kullanabilirsiniz. İşlem dışı bir kuyruğa gönderilen bir ileti güvenilir aktarım güvencesi taşımaz; bu nedenle iletiler kaybolabilir.

MSMQ kuyrukları, Active Directory dizin hizmetine kayıtlı bir Windows kimliği kullanılarak da güvenli hale getirilebilir. MSMQ'yu yüklerken, bilgisayarın bir Windows etki alanı ağının parçası olmasını gerektiren Active Directory tümleştirmesini yükleyebilirsiniz.

MSMQ hakkında daha fazla bilgi için Message Queuing'i (MSMQ) Yükleme başlığına bkz.

NetMsmqBinding

<netMsmqBinding>, WCF tarafından MSMQ kullanarak iki WCF uç noktası arasında iletişim sağlamak için sunulan kuyruğa alınmış bir bağlamadır. Bu nedenle bu bağlama, MSMQ'ya özgü özellikleri kullanıma sunar. Ancak, tüm MSMQ özellikleri ve nitelikleri NetMsmqBinding içinde gösterilmez. NetMsmqBinding Kompakt, çoğu müşterinin yeterli bulması gereken en uygun özellik kümesiyle tasarlanmıştır.

NetMsmqBinding şimdiye kadar ele alınan temel kuyruğa alma kavramlarını, bağlamalardaki özellikler biçiminde ortaya koyar. Bu özellikler de iletilerin nasıl aktarılıp teslim yapılacağını MSMQ'ya iletir. Mülk kategorilerinin tartışması aşağıdaki bölümlerde yer almaktadır. Daha fazla bilgi için belirli özellikleri daha eksiksiz açıklayan kavramsal konulara bakın.

ExactlyOnce ve Dayanıklı Özellikler

ExactlyOnce ve Durable özellikleri, iletilerin kuyruklar arasında nasıl aktarıldığını etkiler:

  • ExactlyOnce: true (varsayılan olarak) ayarlandığında, kuyruğa alınan kanal bir ileti teslim edilirse onun yinelenmemesini sağlar. Ayrıca iletinin kaybolmamasını da sağlar. İleti teslim edilemiyorsa veya Time-To Canlı Mesaj teslim edilemeden önce süresi dolarsa, teslim hatasının nedeni ile birlikte başarısız ileti bir ölü mektup kuyruğuna kaydedilir. Kuyruğa alınan kanal, false olarak ayarlandığında iletiyi aktarmak için çaba gösterir. Bu durumda, isteğe bağlı olarak bir teslim edilemeyen ileti kuyruğu seçebilirsiniz.

  • Durable: (varsayılan) olarak ayarlandığında true , kuyruğa alınan kanal MSMQ'nin iletiyi diskte sabit bir şekilde depolamasını sağlar. Bu nedenle, MSMQ hizmeti durdurulup yeniden başlatılırsa, diskteki iletiler hedef kuyruğa aktarılır veya hizmete teslim edilir. olarak falseayarlandığında, iletiler geçici depoda depolanır ve MSMQ hizmetinin durdurulması ve yeniden başlatılması sırasında kaybolur.

Güvenilir aktarım için ExactlyOnce MSMQ, kuyruğun işlemsel olmasını gerektirir. Ayrıca MSMQ, bir işlemin işlem kuyruğundan okunmasını gerektirir. Bu nedenle, NetMsmqBinding kullandığınızda, ExactlyOncetrue olarak ayarlandığında, mesaj göndermek veya almak için bir işlemin gerekli olduğunu unutmayın. Benzer şekilde, en iyi çaba güvenceleri ve geçici mesajlaşma için MSMQ, kuyruğun işlemsel olmayan olması gerektiğini gerektirir, örneğin ExactlyOncefalse olduğu zaman. Bu nedenle, ExactlyOnce ayarı false veya false dayanıklı olarak ayarlandığında, bir işlem kullanarak gönderip alamazsınız.

Uyarı

Bağlamalardaki ayarlara göre doğru kuyruğun (işlemsel veya işlem dışı) oluşturulduğundan emin olun. ExactlyOnce true ise, bir işlem kuyruğu kullanın; aksi takdirde, işlem dışı bir kuyruk kullanın.

Dead-Letter Kuyruk Özellikleri

Teslim edilemeyen iletileri depolamak için ölü harf kuyruğu kullanılır. Kullanıcı, iletileri ölü-harf kuyruğundan okuyan telafi mantığı yazabilir.

Birçok kuyruğa alma sistemi, sistem genelinde bir teslim edilemeyen ileti kuyruğu sağlar. MSMQ, işlem dışı kuyruklara teslim edilemeyen iletiler için sistem genelinde bir işlem dışı çöpe düşen ileti kuyruğu ve işlem kuyruklarına teslim edilemeyen iletiler için sistem genelinde bir işlemsel çöpe düşen ileti kuyruğu sağlar.

Farklı hedef kuyruklara ileti gönderen birden çok istemci MSMQ hizmetini paylaşıyorsa, istemciler tarafından gönderilen tüm iletiler aynı teslim edilemeyen ileti kuyruğuna gider. Bu her zaman tercih edilemez. Daha iyi yalıtım için, Windows Vista'daki WCF ve MSMQ, teslim edilemeyen iletileri depolamak için kullanıcının belirtebileceği özel bir teslim edilemeyen ileti kuyruğu (veya uygulamaya özgü teslim edilemeyen ileti kuyruğu) sağlar. Bu nedenle, farklı istemciler aynı teslim edilemeyen ileti kuyruğunu paylaşmaz.

Bağlayıcının dikkate değer iki özelliği vardır.

  • DeadLetterQueue: Bu özellik, ölü mektup kuyruğu isteyip istemediğini gösteren bir numaralandırmadır. Numaralandırma, talep edilirse teslim edilemeyen ileti kuyruğunun türünü de içerir. Değerler , Noneve SystemşeklindedirCustom. Bu özelliklerin yorumlanması hakkında daha fazla bilgi için bkz. İleti Aktarım Hatalarını İşlemek için Dead-Letter Kuyruklarını Kullanma

  • CustomDeadLetterQueue: Bu özellik, uygulamaya özgü başarısız ileti kuyruğunun URI adresidir. Bu, ise DeadLetterQueuegereklidir. Custom seçilir.

Zehirli İleti İşleme özellikleri

Hizmet bir işlem altındaki hedef kuyruktan iletileri okuduğunda, hizmet çeşitli nedenlerle iletiyi işleyemeyebilir. İleti daha sonra yeniden okunmak üzere kuyruğa geri alınır. Sürekli başarısız olan iletilerle başa çıkmak için bağlamada bir dizi zehirli ileti işleme özelliği yapılandırılabilir. Dört özellik vardır: ReceiveRetryCount, MaxRetryCycles, RetryCycleDelayve ReceiveErrorHandling. Bu özellikler hakkında daha fazla bilgi için bkz. Zehirli İleti İşleme.

Güvenlik Özellikleri

MSMQ, kuyrukta erişim denetim listeleri (ACL' ler) veya kimliği doğrulanmış iletiler gönderme gibi kendi güvenlik modelini kullanıma sunar. , NetMsmqBinding bu güvenlik özelliklerini aktarım güvenlik ayarlarının bir parçası olarak kullanıma sunar. Bağlamada aktarım güvenliği için iki özellik vardır: MsmqAuthenticationMode ve MsmqProtectionLevel. Bu özelliklerdeki ayarlar MSMQ'nin nasıl yapılandırıldığına bağlıdır. Daha fazla bilgi için bkz . Aktarım Güvenliğini Kullanarak İletileri Güvenli Hale Getirme.

Aktarım güvenliğine ek olarak, gerçek SOAP iletisinin kendisi ileti güvenliği kullanılarak güvenli hale getirilebilir. Daha fazla bilgi için bkz . İleti Güvenliğini Kullanarak İletilerin Güvenliğini Sağlama.

MsmqTransportSecurity ayrıca MsmqEncryptionAlgorithm ve MsmqHashAlgorithm adlı iki özelliği de kullanıma sunar. Bunlar, iletilerin kuyruk-kuyruğa aktarım şifrelemesi ve imzaların karması için seçebileceğiniz farklı algoritmaların numaralandırmalarıdır.

Diğer Özellikler

Önceki özelliklere ek olarak, bağlamada kullanıma sunulan MSMQ'ya özgü diğer özellikler şunlardır:

  • UseSourceJournal: Kaynak günlük kaydı özelliğinin açık olduğunu belirten özellik. Kaynak günlük kaydı, iletim kuyruğundan başarıyla iletilen iletileri izleyen bir MSMQ özelliğidir.

  • UseMsmqTracing: MSMQ izlemenin açık olduğunu belirten bir özellik. MSMQ izleme, bir ileti MSMQ kuyruk yöneticisini barındıran bir makineye vardığında veya buradan ayrıldığında, rapor iletilerini bir rapor kuyruğuna gönderir.

  • QueueTransferProtocol: Kuyruk-kuyruğa ileti aktarımları için kullanılacak protokolün numaralandırması. MSMQ, yerel bir kuyruktan kuyruğa aktarım protokolü ve SOAP Reliable Messaging Protocol (SRMP) adlı SOAP tabanlı bir protokol uygular. SRMP, kuyruktan kuyruğa aktarımlar için HTTP aktarımı kullanılırken kullanılır. SRMP secure, kuyruktan kuyruğa aktarımlar için HTTPS kullanılırken kullanılır.

  • UseActiveDirectory: Active Directory'nin kuyruk adresi çözümlemesi için kullanılması gerekip gerekmediğini belirten boole değeri. Varsayılan olarak bu kapalıdır. Daha fazla bilgi için bkz. Hizmet Uç Noktaları ve Kuyruk Adresleme.

MsmqIntegrationBinding

, MsmqIntegrationBinding BIR WCF uç noktasının C, C++, COM veya System.Messaging API'lerinde yazılmış mevcut bir MSMQ uygulamasıyla iletişim kurmasını istediğinizde kullanılır.

Bağlama özellikleri ile NetMsmqBindingaynıdır. Ancak aşağıdaki farklılıklar geçerlidir:

  • için MsmqIntegrationBinding işlem sözleşmesi, tür parametresinin gövde türü MsmqMessage<T> olduğu türdeki tek bir parametreyi almayla sınırlıdır.

  • MSMQ özgün ileti özelliklerinin çoğu MsmqMessage<T> kullanıma sunulur.

  • İleti gövdesinin seri hale getirilmesine ve seri durumdan çıkarılmasına yardımcı olmak için XML ve ActiveX gibi serileştiriciler sağlanır.

Örnek Kod

MSMQ kullanan WCF hizmetlerini yazma hakkında adım adım yönergeler için aşağıdaki konulara bakın:

WCF'de MSMQ kullanımını gösteren tamamlanmış bir kod örneği için aşağıdaki konulara bakın:

Ayrıca bakınız