Ten post będzie krótki i zwięzły. Jakiś czas temu kiedy włączyłem UAC (User Account Control) ze zdziwieniem zauważyłem, że moja aplikacja używająca Raven DB nie działa. Przy wywołaniu metody DocumentStore.Initialize rzucany był wyjątek HttpListenerException. Po wyłączeniu UAC błąd nie występował.
Z problem łatwo sobie poradzić nadając użytkownikowi, jaki uruchamia aplikację, uprawnienia do nasłuchiwania na porcie używanym przez bazę danych. Można to zrobić przy pomocy narzędzia httpcfg lub netsh tak jak to zostało opisane w tym dokumencie. Co jednak najlepsze Raven DB dostarcza gotowej klasy NonAdminHttp, w bibliotece Raven.Database.dll, która rozwiązuje ten problem. Poniżej przykład użycia.
A tak w ogóle to warto zajrzeć, przy pomocy jakiegoś deasemblera, do wnętrza metody EnsureCanListenToWhenInNonAdminContext i zobaczyć jak została zaimplementowana.
Podsumujmy co już umiemy:
Z problem łatwo sobie poradzić nadając użytkownikowi, jaki uruchamia aplikację, uprawnienia do nasłuchiwania na porcie używanym przez bazę danych. Można to zrobić przy pomocy narzędzia httpcfg lub netsh tak jak to zostało opisane w tym dokumencie. Co jednak najlepsze Raven DB dostarcza gotowej klasy NonAdminHttp, w bibliotece Raven.Database.dll, która rozwiązuje ten problem. Poniżej przykład użycia.
... NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(Store.Configuration.Port); Store.Initialize(); ...
A tak w ogóle to warto zajrzeć, przy pomocy jakiegoś deasemblera, do wnętrza metody EnsureCanListenToWhenInNonAdminContext i zobaczyć jak została zaimplementowana.
Podsumujmy co już umiemy:
- Osadzić Raven DB w aplikacji hostującej.
- Zainicjować Raven DB.
- Skonfigurować dostęp do Raven Studio i API REST'owego.
- Tworzyć obiekty POCO jakie mogą zostać umieszczone w Raven DB.
- Dodawać/usuwać/modyfikować dokumenty.
- Zadawać proste i te trochę bardziej skomplikowane zapytania.
- Utworzyć indeks.
- Skorzystać z algorytmu Map/Reduce.
- Skorzystać z zapytań Lucene.
- Wymusić zwrócenie przez zapytanie aktualnych danych.
- Sterować tym, które właściwości zostaną zapisane do bazy danych.
- Rozwiązać kłopoty związane z IntelliTrace i Raven DB.
- Rozwiązać problem z HttpListenerException.