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.
Şunlar için geçerlidir: SQL Server Azure SQL Yönetilen Örneği
Bir veya birkaç mevcut konuşmayı kullanarak mesaj gönderir.
Transact-SQL söz dizimi kuralları
Syntax
SEND
ON CONVERSATION [(]conversation_handle [,.. @conversation_handle_n][)]
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
[ ; ]
Arguments
SOHBET conversation_handle [.. @conversation_handle_n]
Mesajın ait olduğu konuşmaları belirtir.
conversation_handle geçerli bir konuşma tanımlayıcısı içermelidir. Aynı konuşma kullanıcı adı birden fazla kullanılamaz.
MESSAGE TYPE
message_type_name
Gönderilen mesajın mesaj türünü belirtir. Bu mesaj türü, bu konuşmalarda kullanılan hizmet sözleşmelerine dahil edilmelidir. Bu sözleşmeler, mesaj türünün bu taraftan gönderilmesine izin vermelidir. Örneğin, konuşmaların hedef hizmetleri yalnızca sözleşmede belirtilen mesajları HEDEF TARAFINDAN GÖNDERILEN veya HERHANGI BİR TARAFINDAN GÖNDERILEN şeklinde gönderebilir. Bu cümle atlanırsa, mesaj mesaj türündedir DEFAULT.
message_body_expression
Mesaj gövdesini temsil eden bir ifade sağlar.
message_body_expression isteğe bağlıdır. Ancak, message_body_expression varsa, ifadenin varbinary(max) olarak dönüştürülebilen bir türde olması gerekir. İfade NULL olamaz. Bu madde çıkarılırsa, mesaj gövdesi boş olur.
Remarks
Important
Eğer bu ifade SEND bir toplu veya saklanan prosedürün ilk ifadesi değilse, önceki ifade noktalı virgülle (;)) sonlandırılmalıdır.
Bu ifade SEND , bir veya daha fazla Hizmet Brokerı konuşmasının bir ucundaki hizmetlerden gelen mesajı, bu konuşmaların diğer ucundaki hizmetlere iletir. Bu RECEIVE ifade daha sonra hedef servislerle ilişkili kuyruklardan gönderilen mesajı almak için kullanılır.
ON CONVERSATION maddesine sağlanan konuşma adresleri üç kaynaktan birinden gelir:
Gönderilen mesaj, başka bir hizmetten alınan mesaja yanıt vermediğinde, konuşmayı oluşturan BEGIN DIALOG ifadesinden dönen konuşma adresini kullanın.
Gönderilen bir mesaj, başka bir hizmetten daha önce alınan bir mesaja yanıt olduğunda, orijinal mesajı döndüren ifadenin RECEIVE geri dönen konuşma adresini kullanın.
Bu ifadeyi içeren SEND kod bazen BEGIN DIYALOGUNU veya RECEIVE konuşma tutamacını sağlayan iyimleri içeren koddan ayrı olur. Bu durumlarda, konuşma tutucu, ifade içeren koda SEND iletilen durum bilgisindeki veri öğelerinden biri olmalıdır.
SQL Server Database Engine'in diğer örneklerindeki hizmetlere gönderilen mesajlar, mevcut veritabanındaki bir iletim kuyrukunda saklanır ve uzak örneklerdeki hizmet kuyruklarına iletilene kadar saklanır. Database Engine'in aynı örneğindeki hizmetlere gönderilen mesajlar doğrudan bu servislerle ilişkili kuyruklara yerleştirilir. Bir koşul yerel mesajın doğrudan hedef hizmet kuyruğuna girmesini engellerse, iletim kuyruğu koşul çözülene kadar mesajı depolayabilir. Bu durumlara örnek olarak bazı hata türleri veya hedef hizmet kuyruğunun etkin olmaması yer alır. Mesajları iletim kuyruğundaki görmek için sys.transmission_queue sistem görünümünü kullanabilirsiniz.
SEND atomik bir ifadedir. Bir SEND ifade birden fazla konuşmada mesaj gönderip başarısız olursa, örneğin bir konuşma hatalı durumdaysa, iletim kuyruğuna saklanmaz veya herhangi bir hedef hizmet kuyruğuna koyulmaz.
Service Broker, aynı SEND açıklamada birden fazla konuşma üzerinden gönderilen mesajların depolanması ve iletimini optimize eder.
Bir örneğin iletim kuyruklarındaki iletiler aşağıdakilere göre sırayla iletilir:
İlişkili konuşma uç noktasının öncelik düzeyi.
Öncelik düzeyinde, konuşmadaki gönderme sırası.
Konuşma önceliklerinde belirtilen öncelik seviyeleri, yalnızca HONOR_BROKER_PRIORITY veritabanı seçeneği ON'da ayarlandığında iletim kuyruğundaki mesajlara uygulanır. Eğer HONOR_BROKER_PRIORITY KAPALıysa, o veritabanı için iletim kuyruklarındaki tüm mesajlara varsayılan öncelik seviyesi 5 atanır. Öncelik seviyeleri, mesajların aynı Database Engine örneğinde doğrudan bir servis kuyrukuna konduğu bir noktaya uygulanmazSEND.
Bu açıklama SEND , mesajın gönderildiği her konuşmayı ayrı ayrı kilitleyerek her konuşma için sipariş edilen teslimatı sağlar.
SEND kullanıcı tanımlı bir fonksiyonda geçerli değildir.
Permissions
Bir mesaj göndermek için, mevcut kullanıcının mesajı gönderen her hizmetin kuyruğuna izin alması RECEIVE gerekir.
Examples
Aşağıdaki örnek bir diyalog başlatır ve diyaloga bir XML mesajı gönderir. Mesajı göndermek için örnek, xml nesnesini varbinary(max) olarak dönüştürür.
DECLARE @dialog_handle UNIQUEIDENTIFIER,
@ExpenseReport XML;
SET @ExpenseReport = <construct message as appropriate for the application>;
BEGIN DIALOG @dialog_handle
FROM SERVICE [//Adventure-Works.com/Expenses/ExpenseClient]
TO SERVICE '//Adventure-Works.com/Expenses'
ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseProcessing];
SEND ON CONVERSATION @dialog_handle
MESSAGE TYPE [//Adventure-Works.com/Expenses/SubmitExpense](@ExpenseReport);
Aşağıdaki örnek üç diyalog başlatır ve her birine bir XML mesajı gönderir.
DECLARE
@dialog_handle1 UNIQUEIDENTIFIER,
@dialog_handle2 UNIQUEIDENTIFIER,
@dialog_handle3 UNIQUEIDENTIFIER,
@OrderMsg XML;
SET @OrderMsg = '<construct message as appropriate for the application>';
BEGIN DIALOG @dialog_handle1
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB1/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle2
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB2/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
BEGIN DIALOG @dialog_handle3
FROM SERVICE [//InitiatorDB/InitiatorService]
TO SERVICE '//TargetDB3/TargetService'
ON CONTRACT [//AllDBs/OrderProcessing];
SEND ON CONVERSATION (
@dialog_handle1,
@dialog_handle2,
@dialog_handle3
)
MESSAGE TYPE [//AllDBs/OrderMsg](@OrderMsg);
Ayrıca Bkz.
BEGIN DIALOG CONVERSATION (Transact-SQL)
END CONVERSATION (Transact-SQL)
RECEIVE (Transact-SQL)
sys.transmission_queue (Transact-SQL)