SEND (Transact-SQL)
Wysyła wiadomość, przy użyciu istniejącej konwersacji.
SEND
ON CONVERSATION conversation_handle
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]
[ ; ]
Argumenty
NA KONWERSACJĘ conversation_handle
Określa konwersacji, należącym do tej wiadomości.The conversation_handle must contain a valid conversation identifier.typ komunikatu message_type_name
Określa typ komunikatu wysłanej wiadomości.Tego typ komunikatu musi znajdować się w usłudze kontrakt używane przez tej konwersacji.kontrakt Musi zezwalać na typ komunikatu, które mają być wysyłane z tej strony do konwersacji.Na przykład obiekt miejsce docelowe komunikacji może tylko wysyłać wiadomości, określone w umowie jako SENT BY miejsce docelowe lub SENT BY bez.Jeśli ta klauzula jest pominięty, wiadomość jest typu komunikat domyślny.message_body_expression
Zawiera wyrażenie reprezentujących treści wiadomości.The message_body_expression is optional.Jednak jeśli message_body_expression jest obecny wyrażenie musi być typu, które mogą być konwertowane na varbinary(max). Wyrażenie nie może mieć wartości NULL.Jeżeli pominięto tę klauzulę, treść wiadomości jest pusty.
Remarks
Important Note: |
---|
Jeśli instrukcja SEND nie jest pierwszą instrukcją w wsadowego lub procedura przechowywana, poprzedni instrukcja musi być zakończona średnikiem (;). |
Instrukcja SEND przesyła wiadomości z usługa na jednym końcu Service Broker konwersacja z usługa na drugim końcu konwersacji. Instrukcja przyjęcie jest następnie używana do pobierania wysłanej wiadomości z kolejki, skojarzone z usługa obiekt docelowy.
Uchwyt konwersacji do klauzula ON KONWERSACJI pochodzi z jednego z dwóch źródeł:
Podczas wysyłania wiadomości, który nie znajduje się w odpowiedzi na wiadomości otrzymanych od innej usługa, za pomocą uchwyt konwersacji zwracany z instrukcja BEGIN DIALOG utworzone konwersacji.
Podczas wysyłania wiadomości, która jest odpowiedzią na komunikat, wcześniej otrzymanych od innej usługa, za pomocą uchwyt konwersacji zwrócony przez przyjęcie instrukcja, zwrócony oryginalnej wiadomości.
W wielu przypadkach kod, który zawiera instrukcję SEND różni się od kodu, który zawiera instrukcja BEGIN DIALOG lub przyjęcie dostarczanie uchwyt konwersacji.W takich przypadkach dojścia konwersacji musi być jeden z elementów danych w informacje o stanie przekazywane do kodu, który zawiera instrukcję SEND.
Wiadomości, które są przesyłane do usługa w innym wystąpienie z SQL Server Database Engine są przechowywane w kolejce transmisji w bieżącej bazie danych, dopóki te mogą być przenoszone do kolejki usługa w zdalnego wystąpienie. Wiadomości wysłane do usługa, w tym samym wystąpienie z Database Engine są wprowadzane bezpośrednio do kolejki, skojarzone z tą usługa. Jeżeli warunek zapobiega wiadomości lokalnych są wprowadzane bezpośrednio w obiekt docelowy kolejki usługa, to mogą być przechowywane w kolejce transmisji aż warunek zostanie rozwiązany.Gdy wystąpi przykładem niektórych typów błędów lub kolejkę usługa docelową jest nieaktywny.Można użyć sys.transmission_queue widoku systemu, aby zobaczyć wiadomości w kolejce transmisji.
Wiadomości w kolejkach transmisji w przypadku wystąpienie są przekazywane w sekwencji na podstawie:
Poziom priorytetu ich skojarzone punkt końcowy konwersacji.
W ramach poziom priorytetu, ich kolejność wysyłania w konwersacji.
Poziomy priorytetu, określone w konwersacji priorytety są stosowane tylko do wiadomości w kolejce transmisji Jeśli opcja HONOR_BROKER_PRIORITY bazy danych jest zestaw on.Jeśli jest HONOR_BROKER_PRIORITY zestaw wyłączona, wszystkie wiadomości w kolejce transmisji dla tej bazy danych zostają przypisane domyślny poziom priorytetu 5.Poziomy priorytetu nie są stosowane do SEND, gdy wiadomości są wprowadzane bezpośrednio do kolejki usługa, w tym samym wystąpieniu Database Engine.
Instrukcja SEND blokuje uchwyt konwersacji, a nie do grupy, do której należy dany uchwyt.
SEND nie jest prawidłowy w przypadku funkcja zdefiniowanej przez użytkownika.
Uprawnienia
Aby wysłać wiadomość, bieżącego użytkownika wymaga uprawnienia SEND usługa, czyli z okna dialogowego.Jeśli istnieje wiązanie usługi zdalnej dla usługa, użytkownik określony przez to wiązanie usługi zdalnej musi mieć uprawnienia przyjęcie w kolejce na usługa, okno dialogowe jest.
Przykłady
W poniższym przykładzie uruchamia okno dialogowe i wysyła wiadomości XML w oknie dialogowym.Aby wysłać tę wiadomość, w przykładzie konwertuje obiekt xml varbinary(max).
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) ;
See Also