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 aktarım bağlaması 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.

Queued Application Diagram

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 kuyruğa alınmış 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ğlamayla ilgili uyarılar şunlardır:

  • WCF'deki varsayılan kuyruğa alınmış bağlama kuyrukları kullanan çift yönlü iletişimi desteklemediğinden tüm hizmet işlemleri tek yönlü olmalıdır. İki yönlü iletişim örneği (İki Yönlü İ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 bir WCF istemcisi oluşturmak için, wcf istemcisini oluşturmak ve kuyruğa alınmış iletişimi uygun şekilde yapılandırmak için bağlama bilgilerini almak üzere doğrudan sorgulanabilmesi için hizmette ek bir HTTP uç noktası gerekir.

  • Kuyruğa alınan bağlamaya bağlı olarak, WCF dışında ek yapılandırma gerekir. Ö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 birlikte gönderilen belirli kuyruğa alınmış bağlamalar açıklanmaktadır.

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 iletim ve hedef kuyrukta teslim için iletileri yakalar. 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 aktarılır. 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 bkz . Message Queuing'i (MSMQ) Yükleme.

Netmsmqbinding

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

, NetMsmqBinding bağlamalardaki özellikler biçiminde şimdiye kadar ele alınan temel kuyruğa alma kavramlarını bildirir. Bu özellikler de iletilerin nasıl aktarılıp teslim yapılacağını MSMQ'ya iletir. Özellik kategorilerinin bir 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: (varsayılan) olarak ayarlandığında true , kuyruğa alınan kanal teslim edilirse iletinin yinelenmemesini sağlar. Ayrıca iletinin kaybolmamasını da sağlar. İleti teslim edilemiyorsa veya ileti teslim edilemeden önce Yaşam Süresi iletisinin süresi dolarsa, teslim hatasının nedeni ile birlikte başarısız ileti bir teslim edilemeyen ileti kuyruğuna kaydedilir. olarak ayarlandığında false, kuyruğa alınan kanal 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, kullandığınızdaNetMsmqBinding, olarak ayarlandığında trueileti ExactlyOnce göndermek veya almak için bir işlem gerektiğini unutmayın. Benzer şekilde MSMQ, ne zaman ExactlyOncefalse olduğu ve geçici mesajlaşma için olduğu gibi en iyi çaba güvenceleri için kuyruğun işlem dışı olmasını gerektirir. Bu nedenle, ayarı olarak false veya dayanıklı falseolarak ayarlandığındaExactlyOnce, bir işlem kullanarak gönderip alamazsınız.

Not

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

Teslim Edilemeyen İleti Kuyruğu Özellikleri

Teslim edilemeyen iletileri depolamak için teslim edilemeyen ileti kuyruğu kullanılır. Kullanıcı, iletileri teslim edilemeyen ileti 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 işlem dışı bir teslim edilemeyen ileti kuyruğu ve işlem kuyruklarına teslim edilemeyen iletiler için sistem genelinde işlemsel teslim edilemeyen bir kuyruk 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ğlamanın ilgilendiği iki özelliği vardır:

  • DeadLetterQueue: Bu özellik, teslim edilemeyen bir kuyruk istenip istenmediğini gösteren bir numaralandırmadır. Sabit listesi, istenirse teslim edilemeyen ileti kuyruğunun türünü de içerir. Değerler , Systemve CustomşeklindedirNone. Bu özelliklerin yorumlanması hakkında daha fazla bilgi için bkz . İleti Aktarımı Hatalarını İşlemek için Teslim Edilemeyen İleti Kuyruklarını Kullanma

  • CustomDeadLetterQueue: Bu özellik, uygulamaya özgü teslim edilemeyen ileti kuyruğunun Tekdüzen Kaynak Tanımlayıcısı (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.

MsmqTransportSecurityayrıca ve MsmqHashAlgorithmiki özelliğini MsmqEncryptionAlgorithm 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 makineden her ayrıldığında veya geldiğinde 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.

Msmqıntegrationbinding

, 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 yerel ileti özelliklerinin çoğu kullanım için içinde 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 bkz.