Dawno temu opisałem w jaki sposób zintegrować Membershipa z własną bazą danych (tutaj). W tym artykule chciałbym skupić się na innym, bardzo ciekawym mechanizmie, a mianowicie na profilach.
Profile służą do przechowywania i przywracania ustawień użytkownika odwiedzającego aplikację. Ustawienia, które chcemy przechowywać, konfigurujemy w pliku konfiguracyjnym aplikacji (web.config) w sekcji profile. Kiedy aplikacja startuje oraz mechanizm profili jest włączony, ASP.NET buduje klasę ProfileCommon, która to dziedziczy po ProfileBase. Klasa ta zawiera wszystkie niezbędne mechanizmy do operacji na profilach użytkowników. Przejdźmy do praktyki.
Continue reading
Category Archives: Artykuły
Instalator dla usługi Windows
Każdy średnio zaawansowany użytkownik systemu Windows wie, co to jest usługa systemowa. W niniejszym artykule nie demonstruję jak taką usługę zaimplementować, ani jak ona działa, lecz prezentuję jak można utworzyć instalator dla takiej usługi w środowisku Visual Studio.
Continue reading
Sortowanie kolumny VARCHAR(2500)
Załóżmy, że mamy tabelę z kolumną typu VARCHAR(2500), a w niej sporo wierszy. Wynik zapytania z tej tabeli chcielibyśmy posortować według wspomnianej kolumny. Oczywiście będzie to bardzo czasochłonne, a tym samym słabo wydajne. Jak sobie z tym poradzić?
Continue reading
Cache dla danych z bazy
W każdej aplikacji, wykorzystującej bazę danych do przechowywania informacji, są elementy/tabele/struktury, których zawartość zmienia się niezmiernie rzadko. W związku z tym, zasadne wydaje się zaimplementowanie mechanizmu przechowywania tychże informacji w “bardziej stałym” obiekcie. Ograniczyłoby to komunikację pomiędzy bazą danych i aplikacją, a tym samym zwiększyło wydajność aplikacji. Mechanizm taki można zaimplementować na wiele sposobów. Jednym z nich może być klasa typu Manager do przechowywania i zarządzania informacjami. Ja natomiast pokusiłem się o implementację typu cache, którą prezentuję poniżej.
Continue reading
CustomPrincipal cd.
Jakiś czas temu pokazałem w tym artykule sposób rozszerzenia możliwości obiektu zalogowanego użytkownika (Context.User). Problemem tamtego rozwiązania jest to, iż na końcu każdego żądania tworzony jest na nowo obiekt CustomPrincipal, co w finalnym efekcie znacząco wpływa na wydajność aplikacji. Oczywiście jest to zależne od ilości rzeczy implementowanych przez nasz obiekt. W celu naprawy tego niedociągnięcia należy nieznacznie zmodyfikować kod klasy z pliku Global.asax.cs – zapraszam do lektury.
Continue reading
Unique index
Może wydarzyć się sytuacja, że zajdzie konieczność utworzenia unikalnego klucza na kolumnie typu tekstowego (CHAR lub VARCHAR). W tym momencie warto nadmienić, iż każdy znak zajmie wtedy 1 bajt. Jeśli zaś będzie to typ danych unicode (NCHAR lub NVARCHAR), to znak zapisany będzie na 2 bajtach pamięci. Dlaczego o tym wspominam? Ponieważ jeśli wielkość indeksu przekroczy magiczną granicę 900 bajtów pojawia się Error 1946: „Operation failed. The index entry of length 1000 bytes for the index 'UQ_table1′ exceeds the maximum length of 900 bytes.”
Continue reading
BasePage
Mechanizm dziedziczenia jest ogólnie znany oraz chętnie wykorzystywany w programowaniu obiektowym. Nie wiedzieć czemu w aplikacjach internetowych stosuje się go raczej rzadko. W tym artykule chciałbym zaprezentować jak wykorzystać dziedziczenie w sprytny sposób w aplikacji webowej.
Continue reading