2013-06-13 10 views
5

Zasadniczo mam nową aplikację komputerową, nad którą pracuję mój zespół i pracuję nad nią na komputerach z systemem Windows 7 w naszej hali produkcyjnej. Ten program będzie używany dość ciężko, gdy zostanie wprowadzony i będzie musiał wchodzić w interakcję z naszą bazą danych produkcji. Oceniam, że będzie (w końcu) około 100-200 maszyn obsługujących tę aplikację w tym samym czasie.Jak powinienem wchodzić w interakcje z bazą danych z aplikacji desktopowej bez otwierania jej na cały świat?

Mamy szczęście, robimy wszystko od zera, więc definiujemy bazę danych, wszelkie usługi sieciowe, projekt programu i wszelkie interakcje między wyżej wymienionymi.

Tak jak obecnie, nasze starsze aplikacje mają bezpośredni dostęp do bazy danych, co jest trudne. Nie chcemy tego robić w nowej aplikacji.

Moje pytanie brzmi: jak to zrobić? Niejasne, wiem, ale w zasadzie mam tu dużo do powiedzenia i nie jestem do końca pewien, jaki jest właściwy kierunek.

Moja początkowa myśl, oparta na tym, co zauważyłem, że inni robią, polega w zasadzie na tym, że pomija się bazę danych za pomocą usług sieciowych. tj. wszystkie interakcje z bazą danych z poziomu podłogi MUSZĄ występować za pośrednictwem usług sieciowych, zapewniając warstwę bezpieczeństwa, wykonując większość logiki bazy danych za zamkniętymi drzwiami. Połączenia z usługami sieciowymi są następnie zabezpieczane dla poszczególnych użytkowników za pośrednictwem usługi Active Directory.

Jak jednak stwierdziłem, ma to pewne implikacje ... Musimy zebrać dane, zanim dotrą do aplikacji. Nadal istnieje możliwość złośliwego nadużywania poprzez wielokrotne wykorzystywanie wywołań usług sieciowych do niszczenia lub spamowania danych. Przyjrzeliśmy się Entity Framework i bardzo podoba nam się to, co zapewnia, ale jak najlepiej mogę powiedzieć, to będzie niedostępne, dopóki nie znajdziemy się na poziomie aplikacji w tym przypadku.

Po prostu wydaje się, że nie mogę dojść do wniosku, co jest "właściwe". Co jest słuszne?

Odpowiedz

3

WebServices brzmi jak właściwe podejście. Implementacja warstwy zorientowanej na SOA na warstwie serwisów internetowych daje dużą kontrolę nad tym, co dzieje się z danymi na serwerze bazy danych.

Nie podzielam twoich wątpliwości co do powtarzających się połączeń, które powodują jakiekolwiek uszkodzenia - najpierw możesz mieć dziennik inspekcji każdego połączenia, aby wykrycie możliwych nadużyć było oczywiste. Ale możesz także wdrożyć zabezpieczenia oparte na rolach, aby metody usług sieciowych były narażone na działanie użytkowników w roli, co oznacza, że ​​nie każdy będzie mógł wywołać dowolną metodę.

Można nawet zabezpieczyć swoje usługi sieciowe za pomocą uwierzytelniania formularzy, tak aby uwierzytelnianie odbywało się z dowolnego źródła danych, a nie tylko z aktywnego katalogu.

I ostatnia rzecz, sama aplikacja może zostać opublikowana jako aplikacja ClickOnce, tak aby była pobierana i uruchamiana ze strony internetowej i automatycznie aktualizuje się w momencie publikacji nowych wersji.

Jeśli potrzebujesz wskazówek technicznych, mam na blogu, że rok temu:

http://netpl.blogspot.com/2008/02/clickonce-webservice-and-shared-forms.html

+0

Dziękuję za odpowiedź! Miałem nadzieję, że to będzie właściwe podejście. – MGSoto

1

moja propozycja ponieważ jesteś Greenfield jest zastosowanie podejścia otoki API z Servicestack.

Check out: http://www.servicestack.net/ServiceStack.Northwind/

Doing, że można korzystać z uwierzytelniania servicestack, abstrakcyjne dala swoją warstwę dB (bo można przenieść do innego operatora DB, zmienić jego położenie, zapewniają kolejek do elementów roboczych itp ...) a z czasem może przenieść całą infrastrukturę do wewnętrznej aplikacji intranetowej.

Plus Servicestack jest niesamowicie szybki, współpracuje z prawie każdym protokołem, który można przez to przejść, i umożliwia jego uruchamianie przez MONO, więc nie utknąłeś z backendem MS, który mógłby być bardzo drogi.

Moje dwa centy. :)

+0

@HighCore Ever used ServiceStack? Oto niektóre [różnice w porównaniu do WCF] (http://www.infoq.com/articles/interview-servicestack). – mythz

+0

@HighCore Jeśli nigdy nie próbowałeś czegoś innego, nigdy nie poznasz ograniczeń swoich frameworków ani tego, co robią inni. Nic, co powiedziałeś, nie mówi, że jesteś otwarty na naukę, co promuje najlepsze praktyki, większą wydajność, lepszą produktywność lub większą odporność. Również żadna duża firma internetowa lub SOA/firma usług w chmurze nie używa SOAP ani WCF. WCF jest również przestarzałe, Microsoft nawet go nie używa ani nie promuje w nowych usługach, a jego najnowsze usługi fx Web API nie przypominają WCF. W końcu jesteś jednym z niewielu, którzy ją promują, a to prawdopodobnie powoduje, że masz ograniczone doświadczenie na zewnątrz. – mythz

+0

@Mythz możesz mieć rację. Może czas trochę zmienić zdanie. –

0

Po pierwsze, to pytanie nie jest odpowiednie dla StackOverflow, możesz uzyskać bardzo szybkie głosowanie.

Po drugie, może zajrzeć do tego pod WCF RIA Services.

Umożliwiają one tworzenie podstawowych operacji CRUD dla wszystkich podmiotów i tym podobnych. Sam nigdy tego nie użyłem, nie, nie jestem pewien, jakie mogą być potencjalne problemy.

W przeciwnym razie, po prostu to, co zrobiliśmy:

Tworzenie generyczne (<T>) interfejsów i usług oraz kontrakty i wszystko. Umożliwi to dostosowanie funkcjonalności CRUD w swoich Usługach, DAO, ViewModels i tym podobnych do dowolnego typu jednostki.

Powiązane problemy