2008-08-06 50 views
9

Obecnie pracuję nad projektem o określonych wymaganiach. Krótki przegląd z nich są następujące:Wyzwalacze zdarzeń oparte na zegarach

  • Dane są pobierane z serwisów internetowych zewnętrznych
  • Dane są przechowywane w SQL 2005
  • Dane są manipulowane poprzez web GUI
  • usługa Windows, który komunikuje się z Usługi sieciowe nie mają sprzężenia z naszym wewnętrznym interfejsem internetowym, z wyjątkiem bazy danych.
  • Komunikacja z usługami sieciowymi musi odbywać się zarówno w czasie, jak i wyzwalana interwencją użytkownika w interfejsie internetowym.

Bieżący (przedprodukcyjny) model wyzwalania komunikacji usług sieciowych jest uzyskiwany za pośrednictwem tabeli bazy danych, która przechowuje żądania wyzwolenia wygenerowane w wyniku interwencji ręcznej. Naprawdę nie chcę mieć wielu mechanizmów wyzwalania, ale chciałbym móc zapełnić tabelę bazy danych wyzwalaczami w oparciu o czas wywołania. Jak widzę, są na to dwa sposoby.

1) Dostosuj tabelę wyzwalacza, aby zapisać dwa dodatkowe parametry. Jedna z nich "Czy to jest oparte na czasie czy ręcznie dodane?" oraz pole zerowe do przechowywania szczegółów pomiaru czasu (dokładny format do ustalenia). Jeśli jest wyzwalaczem utworzonym ręcznie, oznacz go jako przetworzony, gdy wyzwalacz został uruchomiony, ale nie, jeśli jest wyzwalaczem czasowym.
lub
2) Utwórz drugą usługę systemu Windows, która tworzy wyzwalacze w locie w określonych odstępach czasu.

Druga opcja wydaje mi się krówką, ale zarządzanie opcją 1 może łatwo przerodzić się w koszmar programowania (skąd wiadomo, czy ostatnia ankieta tabeli zwróciła wydarzenie, które musi wystrzelić, i jak następnie przerywasz ponowne wywoływanie w następnym sondowaniu)

Byłbym wdzięczny, gdyby ktoś mógł poświęcić kilka minut, aby pomóc mi zdecydować, która trasa (jedna z tych dwóch lub ewentualnie trzecia, niepubliczna) do podjęcia .

Odpowiedz

1

Dlaczego nie używać zadania SQL zamiast usługi Windows? Możesz przechowywać cały swój kod "wyzwalacza" db w procedurach składowanych. Następnie Twój interfejs użytkownika i zadanie SQL mogą wywoływać te same przechowywane procedury i tworzyć wyzwalacze w taki sam sposób, niezależnie od tego, czy są wykonywane ręcznie, czy w odstępach czasu.

0

Sposób w jaki to widzę jest taki.

Masz usługę Windows, która pełni rolę programu szeregującego, a w niej są pewne klasy, które po prostu wywołują usługi sieciowe i umieszczają dane w twoich bazach danych.

Możesz więc używać tych klas bezpośrednio z WebUI i importować dane w oparciu o wyzwalacz WebUI.

Nie podoba mi się pomysł przechowywania akcji wygenerowanej przez użytkownika jako flagi (wyzwalacza) w bazie danych, w której niektóre usługi będą odpytywać (w odstępie, który nie jest pod kontrolą użytkownika), aby wykonać tę akcję.

Można nawet przekształcić cały kod w plik exe, który można następnie zaplanować przy użyciu programu Windows Scheduler. Zadzwoń do tego samego exe za każdym razem, gdy użytkownik uruchomi akcję z interfejsu WWW.

0

@Vaibhav

Niestety, fizyczna architektura rozwiązania nie pozwoli żadnej bezpośredniej komunikacji między elementami, inny niż Web UI do bazy danych i bazy danych do usługi (które następnie mogą wołać do usług internetowych) .Zgadzam się jednak, że ponowne wykorzystanie klas komunikacyjnych byłoby tutaj idealne - po prostu nie mogę tego zrobić w ramach naszej działalności *

* Czy nie jest to zawsze sposób, który technicznie " lepsze "rozwiązanie jest hamowane przez czynniki zewnętrzne?