2009-09-21 12 views
19

Mam wiele operacji w bazie danych, które muszą wywołać kod aplikacji. Obecnie korzystam z odpytywania bazy danych, ale słyszę, że SQL Server Service Broker może dać mi funkcję podobną do MSMQ.Czy możesz/powinieneś używać brokera usług SQL Server z aplikacjami .NET?

  1. Czy mogę słuchać kolejek usługi SQL Server Service Broker z aplikacji .NET działających na innym komputerze?
  2. Jeśli tak, czy powinienem to zrobić?
  3. Jeśli nie, to co poleciłbyś?
+0

Jasne, robię to cały czas. – RBarryYoung

+0

Dlaczego nie zaznaczasz odpowiedzi, jeśli to pomogło, lub postawisz nagrodę, jeśli chcesz uzyskać więcej odpowiedzi? (ponieważ ma prawie 5 lat, prawdopodobnie nie musisz już z tym walczyć ...) – Noctis

Odpowiedz

11

Aby odpowiedzieć na Twoje pytania:

Mogę słuchać SQL Server Obsługa kolejek Broker z aplikacji .NET działa na innym komputerze?

Tak.

Jeśli tak, czy powinienem to zrobić?

Jeśli nie, to co poleciłbyś?

Można rozważyć zastosowanie SqlDependency. Używa Service Brokera za kulisami, ale nie jawnie.

Możesz zarejestrować obiekt SqlDependency przy pomocy zapytania SELECT lub procedury składowanej. Jeśli inne polecenie zmieni dane, które zostały zwrócone z zapytania, wydarzenie zostanie uruchomione. Możesz zarejestrować obsługę zdarzeń i uruchomić dowolny kod, który Ci się podoba w tym czasie. Lub możesz użyć SqlCacheDependency, która po prostu usunie powiązany obiekt z pamięci podręcznej po uruchomieniu zdarzenia.

Możesz również użyć Service Broker bezpośrednio. Jednak w takim przypadku będziesz musiał wysyłać i odbierać własne wiadomości, tak jak w MSMQ.

W środowiskach z obciążeniem równoważnym, SqlDependency sprawdza się w przypadkach, gdy kod musi być uruchamiany na każdym serwerze sieciowym (np. Podczas czyszczenia pamięci podręcznej). Wiadomości Service Broker są lepsze dla kodu niż powinny być uruchamiane tylko raz - na przykład wysyłanie wiadomości e-mail.

Jeśli to pomoże, szczegółowo omówię oba systemy z przykładami z mojej książki (Ultra-Fast ASP.NET).

+2

Właśnie kupiłem twoją książkę, ponieważ wygląda całkiem nieźle. Dodatkowo mogę wspierać innego użytkownika StackOverflow. –

+0

Dzięki. Mam nadzieję, że ci się spodoba; proszę daj mi znać co myślisz. – RickNZ

17

SSB (broker usług SQL) ma funkcję o nazwie Activation, która umożliwia przypisanie procedury przechowywanej do kolejki. Program SQL Server będzie uruchamiał tę procedurę wewnętrznie, gdy w kolejce znajdują się komunikaty. Procedura dołączana do kolejki może być procedurą CLR, umożliwiającą uruchamianie modułów logiki biznesowej zarządzanego kodu (C#, VB.Net etC).

Alternatywą dla wewnętrznej aktywowanej procedury składowanej jest ustawienie klienta zewnętrznego "nasłuchiwanie" w kolejce z instrukcją WAITFOR(RECEIVE ...). Ta składnia jest specjalna dla SSB i wykonuje blokowanie bez blokowania do momentu otrzymania komunikatów. Aplikacje następnie pobierają odebrane wiadomości jako zwykły zestaw wyników T-SQL (np. SELECT). Istnieje również próbka External Activator for Service Broker, która wykorzystuje mechanizm powiadamiania o zdarzeniach, aby wiedzieć, kiedy uruchomić aplikację do odbierania wiadomości z kolejki.

Jeśli chcesz zobaczyć próbkę kodu T-SQL, który wykorzystuje wewnętrzną aktywację SSB, sprawdź Asynchronous procedure execution.

+0

Naprawdę szukam jego przydatności do wysyłania wiadomości do zewnętrznych aplikacji uruchamianych na oddzielnych komputerach z bazy danych. –

+0

SSB może wysyłać tylko wiadomości do instancji SQL. Możesz użyć edycji SQL Express dla każdej oddzielnej maszyny. –

+0

Wiem, że to 8 lat później, ale powyższy komentarz nie jest prawdziwy. Service Broker będzie działał po prostu przy użyciu zewnętrznych czytników kolejki. Działa to nawet z TPL i EF. –

Powiązane problemy