Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Microsoft Professional Developer Days 2004 ADO.NET Konflikty i kłopoty Tomasz Kopacz.

Podobne prezentacje


Prezentacja na temat: "Microsoft Professional Developer Days 2004 ADO.NET Konflikty i kłopoty Tomasz Kopacz."— Zapis prezentacji:

1 Microsoft Professional Developer Days 2004 ADO.NET Konflikty i kłopoty Tomasz Kopacz

2 Konflikty Na poziomie interfejsu użytkownika Dwie osoby zmieniają ten sam wiersz Rozwiązanie: Odpowiedni DataAdapter Mechanizm blokad aplikacyjnych na poziomie SQL Server Na poziomie mechanizmów bazy Konflikt równolegle wydawanych poleceń Stracone aktualizacje, odczyty widmo itp Rozwiązanie: Transakcje bazodanowe EnterpriseServices

3 Architektura ADO (dokładniej – SQLClient) Provider danych dla Sql Server… IDataReader SqlException SqlError CommandBuilder SqlCommand Sql DataParameter Sql Connection Sql Server Sql Transaction SqlDataAdapter DataSet Własne mechanizmy

4 DataAdapter SelectCommand, InsertCommand, UpdateCommand, DeleteCommand Można w transakcji CommandBuilder Kosztowne! (projektant, dodatek itp.) Wsparcie w DataSet DataRowVersion – wersja wiersza Original, Current, Proposed, Default Podstawienie z kolekcji Parameters SqlCommand SourceVersion DataRowState – stan wiersza Added,Deleted,Modified,Unchanged Detached

5 Strategie rozwiązywania konfliktów Optymistyczna! Porównujemy tylko klucz główny Zakładamy zmiany w każdym polu Standardowa Wszystkie pola Timestamp Pole charakterystyczne? Różnice w wydajności zależą od łącza do SQL, wielkości danych itp. 100 MB – ok. 19% timestamp szybszy VPN 128 kb – nawet 60% Pesymistyczna Blokada w transakcji od czasu odczytu

6 Timestamp i wykrywanie konfliktów Długie daneTS xxxxxxxxxxaa yyyyyybb zzzzzzcc yyyyyybb xxxxxxxxxxaa xxxxxxxxxxaa OK! Klient BKlient A Zapis Konflikt Czas

7 Typy aktualizacji Wszystkie albo żaden Trzeba aktualizację zamknąć w transakcji Tylko wiersze bez konfliktów ContinueUpdateOnError=true (Sprawdzamy: HasErrors/GetErrors) Pesymistyczne = blokada na tabeli Wystartować transakcję przed wypełnieniem DataSet (I zastanowić się czy nie da się postąpić inaczej)

8 Transakcje bazodanowe Zapewniają ACID Obiekt SqlTransaction Pobierany z połączenia Przypisywana do polecenia Tryby izolacji Podpowiedzi przy poleceniach SQL NOLOCK, READCOMMITTED,REPEATABLEREAD, SERIALIZABLE TABLOCK (jak ktoś naprawdę musi!) Temat w pomocy: Locking Hints

9 Tryb izolacji a problemy współbieżności Poziom izolacji (wg kosztowności) ReadUncommittedReadCommitedRepeatableReadSerializable Problem z współbieżnością Stracone aktualizacje XXXX Odczyt właśnie zmienianych rekordów ?OK Niespójne odczyty ??OK Odczyty rekordówwidmo ???OK

10 Demo – praca z wersjami w DataSet Blokady optymistyczne Aktualizacje wszystkich które można Aktualizacje tylko wszystkich lub żadnego Pokazanie użytkownikowi zmienionych danych Wersje DataSet i okolice Blokady pesymistyczne

11 Własne transakcje Problem: Okno tylko dla jednego użytkownika Rozwiązanie: Transakcje aplikacyjne w SQL Server sp_getapplock nazwa_zasobu, tryb, właściciel, timeout sp_releaseapplock nazwa_zasobu, właściciel Można używać Wewnątrz sesji (jednego połączenia) Nie lokalne – trzeba użyć np. mutex-a Wewnątrz transakcji

12 Demo - własne transakcje aplikacyjne Blokada okna Trwa aż się zwolni zasób Lub – sesja zostanie zamknięta

13 Enterprise Services? Problem: Transakcja obejmuje kilka etapów Połączeń, sekwencja operacji bazodanowych itp Złożona logika i wygodniej byłoby dodać cechę wykonuj w transakcji Kod złożony i zmiany trzeba wycofywać ręcznie Rozwiązanie: Obiekt dziedziczący z EnterpriseServices Duże możliwości (kolejki, pula itp.) Transakcje Połączenie wylistowane w transakcji Kod kompensacyjny Rejestracja regsvcs.exe System.EnterpriseServices.RegistrationHelper.InsallAssembly

14 Serwerowy obiekt ServicedComponent 1. Referencja do System.EnterpriseServices 2. Klasa dziedziczy z ServicedComponent 3. [assembly: ApplicationActivation(ActivationOption.Server/Library)] 4. Atrybuty klasy Transaction Disabled NotSupported Required RequiresNew Supported 5. Atrybuty metody: [ AutoComplete(true) ] 6. Lub: ContextUtil.SetAbort()/.SetComplete();

15 Własny kod kompensujący Problem: Używany obiekt nie jest świadomy transakcji Długa operacja (szkoda zasobów SQL-a) Rozwiązanie: Kod kompensujący System.EnterpriseServices.CompensatingResourceManager Główne klasy Clerk Compensator LogRecord [assembly: ApplicationCrmEnabled] ActivationOption.Server

16 Demo - EnterpriseServices Transakcje automatyczne Transakcje ręczne Kod kompensacyjny Plik + kasowanie Uwagi! Interfejs Raz skompilować oddzielny DLL – ułatwi pracę Dodać do GAC Łatwiej znajdzie formatter itp Referencje do DLL a nie do projektu

17 Zdalnie? Problem: Obiekt EnterpriseServices na zdalnej maszynie Rozwiązanie: Remoting Własny proces nasłuchujący (remoting) + wrapper Umieścić w /bin aplikacji WWW + drobne zmiany w web.config/remoting.config Uwaga! ASPNET nie zarejestruje samo COM+ System.UnauthorizedAccessException: Odmowa dostępu do klucza rejestru HKEY_CLASSES_ROOT\EnterpriseDemoSrv.EntComp. Typy wywołań: SAO (SingleCall/Singleton) CAO (Jak normalne COM/.NET) Klient: Activator.GetObject(typeof(…),"uri");

18 Szybkie demo – zdalne wywołanie Pliki dll kopiowane do bin Zmiany w web.config Prawa dla anonimowego użytkownika! Klient – interfejs + Activator.GetObject

19 Warto jeszcze wiedzieć SWC (Services Without Components) COM+ 1.5 (XP, 2003 Server) BYOT (Bring Your Own Transaction) CreateWithTransaction, CreateWithTipTransaction Windows 2003 – domyślnie COM+ i DTC zablokowane Add/Remove Windows Components Application Server Enable network COM+ access Enable network DTC access Component Services – (…) - Security Configuration Prościej używać logowanie SQL Jeżeli coś nie działa: Uprawnienia… Usunąć cały komponent (okno Component Services) W Event Log -> co nie działa

20 Cechy omawianych mechanizmów… Konflikty Timestamp – najtańszy; Porównywanie pól – gdy nie można zmienić schematu Inne charakterystyczne pole DataSet ma olbrzymie możliwości… Blokady aplikacyjne w SQL Co jak klient padnie? master.syslockinfo/master.sysprocesses kodowane – kod połaczenia; do oddzielnej tabeli Ale i tak – blokady sesyjne zwalniane są w momencie zakończenia (padu) sesji Klient/Serwer – transakcje lokalne Szybkie, ale… ręczne EnterpriseServices Gdy mamy taką możliwość Nawet na kliencie Wolniejsze Proste w użyciu - wystarczy deklaracja atrybutu Łatwa migracja na n warstw

21 Co zmieni Yukon Kursory po stronie serwera Ale nadal – nie używać SqlDependency Jedno połączenie – wiele równoległych poleceń Mniejsza rola transakcji w EnterpriseServices? Indigo jest ciekawym produktem I zawiera funkcjonalność EnterpriseServices

22 Microsoft Professional Developer Days 2004 Dziękuję za uwagę Pytania: Prezentacja + przykłady do ściągnięcia dostępne na


Pobierz ppt "Microsoft Professional Developer Days 2004 ADO.NET Konflikty i kłopoty Tomasz Kopacz."

Podobne prezentacje


Reklamy Google