Udostępnij za pośrednictwem


SEND (Transact-SQL)

Wysyła wiadomość, przy użyciu istniejącej konwersacji.

Topic link iconKonwencje składni języka Transact-SQL

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 noteImportant 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) ;