davidpoll.com
Posty oznaczone logowaniem
Zalogowaniu Nawigacja w Silverlight 3 Beta
Wysłany przez david.poll w Silverlight na 12 maja 2009
Byłem niedawno w okolice z mojego serwera - Ja niedawno przestawił z gospodarzem ASP.NET usługi na wirtualny serwer dedykowany, więc dostaję szansę gry, które z pełną kontrolę nad moim serwerze po raz pierwszy. Spędziłem od pewnego czasu utworzenia rejestrowanie i statystyki na serwerze przy użyciu funkcji IIS rejestrowania i niektóre 3rd party oprogramowania dziennika "pożerające. uwzględniając, że dane logowania jest bezcenne - między innymi pomaga mi znać które strony ludzie są zainteresowani i daje mi wgląd, czy to zbyt trudne dla niektórych sekcjach mojej stronie. Wraz z kontroli żeglugi w Silverlight 3 Beta SDK, o rozwiązanie rejestrowania współpracuje z mojego serwera sieciowego wydaje tylko ostrożny!
Tim Heuer ma wielką blogu od grudnia o korzystaniu ze śledzenia zdarzeń Google Analytics dla aplikacji Silverlight . Mam wrażenie, że podejście to dobrze z nowymi nawigacji kontroli, ale byłem szukasz prostego rozwiązania, które dodają wpisy do mojego IIS kłody bezpośrednio z aplikacji Silverlight (bez konieczności dodawania jakichkolwiek javascript lub skorzystać z mostu HTML).
Zagadnienie to, że kontrole wykorzystania nawigacji fragment URI (tekst po "#" znak w adresie URL), aby określić, które strony, aby przejść do kontroli w ramki. W związku z (i słusznie), deeplinks w Silverlight kontroli i nawigacji, który nigdy nie występuje w kontroli Silverlight w obie strony na serwerze, więc nie ma sposobu na serwerze zalogować ich wystąpieniu.
Stąd też moje podejście jest bardzo prosta: make żądania HTTP do serwera, że będzie dowolnym momencie mój log ramka jest nawigacja.
Moje wymagania w ramach eksperymentu:
- Ponowne wykorzystanie wbudowanych funkcji rejestrowania mojego serwera internetowego (IIS 7, ale wyobrażam sobie pracy to szerzej)
- Upewnij się, że niepowtarzalny URI w mojej aplikacji są rejestrowane indywidualnie (tak zapytanie smyczki, niestandardowe URI, itp. nie są utracone w zalogowany danych)
- Unikaj ograniczenie stosowania przez wymagających HTML mostu być dostępne lub wymagające dodatkowych plików, które mają być dodane do witryny (na przykład pliki JavaScript lub dodatkowych Strony ASP.NET)
Okazuje się, że nie jest tak trudne do zrobienia! Zacząłem nawigacji projekt aplikacji Silverlight szablon, że statki z Silverlight Tools Beta 3, Visual Studio , które pojawiły się na MIX. Projekt ten szablon zostanie utworzony mnie z ramki, niektóre stron, a niektóre przyciski, które są przyczyną ramkę do nawigacji - wszystko, co noworodka nawigacji wniosek musi rosnąć duży i silny!
Zacząłem od pracy z kontroli ramki "nawigacja" w przypadku MainPage.xaml:
: Frame x : Name ="Frame" Source ="/Views/HomePage.xaml" Navigated ="Frame_Navigated" HorizontalContentAlignment ="Stretch" VerticalContentAlignment ="Stretch" Padding ="15,10,15,10" Background ="White"/> <Nawigacji: Rama x: Name = "Ramka" Source = "/ Widok / HomePage.xaml" nawigacja = "Frame_Navigated" HorizontalContentAlignment = "Stretch" VerticalContentAlignment = "Stretch" padding = "15,10,15,10" w tle = " White "/>
Prostego część z drogi (kto wie?), Zacząłem grać z WebRequest i WebClient, dopóki nie wpadł na coś, co wydawało się spełniać moje potrzeby:
sender, NavigationEventArgs e) private void Frame_Navigated (object sender, NavigationEventArgs e) ( Uri ( Application .Current.Host.Source.ToString() + "?nav=" + Uri .EscapeDataString(e.Uri.ToString())); Uri uri = new Uri (Application. Current.Host.Source.ToString () + "? Nav =" + Uri. EscapeDataString (e.Uri.ToString ())); .Create(uri); WebRequest wc = WebRequest. Utwórz (URI); wc.Method = "POST"; wc.BeginGetResponse ((res) => ( WebResponse wr = wc.EndGetResponse (res); ), This); )
Przejdę przez ten wiersz po wierszu i wyjaśnić moje myślenie:
Uri ( Application .Current.Host.Source.ToString() + "?nav=" + Uri .EscapeDataString(e.Uri.ToString())); Uri uri = new Uri (Application. Current.Host.Source.ToString () + "? Nav =" + Uri. EscapeDataString (e.Uri.ToString ()));
Tutaj, musiałem wymyślić pliku Wiedziałem będzie obecny na serwerze i nie może mieć żadnych semantyka, że będę nadrzędnych poprzez żądanie. Dodatkowo, chciałem wybrać plik, który jednoznacznej identyfikacji aplikacji Silverlight, która jest składającego wniosek. Wydawało się logiczne, a następnie użyć pliku XAP mojej Silverlight aplikacji do tego celu! Następnie dodałem zapytania, które byłyby przesyłane do serwera w dół, które jednoznacznie identyfikują URI, że rama jest używana. rezultacie, jeśli źródło URI "/ Widok / HomePage.xaml" (jak to pokazano w XAML), wynikający z URI: "http://yourservername.com/yourSilverlightApp.xap? nav =% 2FViews% 2FHomePage.xaml ". Ok, ok, to nie całkiem (dzięki kodowaniu URI), ale to załatwia sprawę. zapytania nigdy tutaj nie używam, ale robi się przesyłane do serwera i zalogowany, która daje mi dokładnie ślady szukałem!
Dalej:
.Create(uri); WebRequest wc = WebRequest. Utwórz (URI); wc.Method = "POST";
Ważne na wynos z tych dwóch linii jest to, że użyłem metody HTTP POST. Spędziłem sporo czasu próbując użyć GET do rejestrowania się, ale miał dwie wady krytyczne:
- Każdy wniosek będzie ponownie pobrać XAP, który znacznie więcej danych niż chciałem tylko transfer do logowania się dzieje
- WebRequest i WebClient jak korzystać z pamięci podręcznej przeglądarki (i nie mogłem znaleźć rozwiązanie, które nie polegają na zmodyfikowaniu zapytania, które mają zatopiony moje podejście), więc powtarzam, wizyty do tej samej strony w aplikacji Silverlight nie kiedykolwiek rzeczywiście dotrzeć do serwera i otrzymać zalogowany
W końcu:
wc.BeginGetResponse ((res) => ( WebResponse wr = wc.EndGetResponse (res); ), This);
To tylko pędy off wniosek internetowych. Nie ma nic specjalnego szczególnie tutaj oprócz zauważyć, że odpowiedź jest całkowicie ignorowany.
I to jest to!
Oto dowód, prosto z mojego IIS dzienników (w formacie W3C ... IP redacted):
13.05.2009 04:41:06 POST / Samples / LoggedSilverlightNavigation / ClientBin / nav LoggedSilverlightNavigation.xap =%% 2FViews 2FAboutPage.xaml - <adres Redacted> HTTP/1.1 Mozilla/4.0 + (compatible; MSIE +8.0 +, + Windows NT + +6.1, + WOW64; + Trident/4.0; + SLCC2; +. NET CLR +2.0.50727 +, +. NET CLR +3.5.30729 +, +. NET CLR + +3.0.30729; + + Media Centrum + PC +6.0) - 405 1496
13.05.2009 04:41:06 GET / feed = rss2 - <adres HTTP/1.1 Redacted> Windows-RSS-Platform/2.0 + (MSIE +8.0, + + Windows NT +6.1) - 304 475
13.05.2009 04:41:06 POST / Samples / LoggedSilverlightNavigation / ClientBin / nav LoggedSilverlightNavigation.xap =%% 2FViews 2FHomePage.xaml - <adres Redacted> HTTP/1.1 Mozilla/4.0 + (compatible; MSIE +8.0 +, + Windows NT + +6.1, + WOW64; + Trident/4.0; + SLCC2; +. NET CLR +2.0.50727 +, +. NET CLR +3.5.30729 +, +. NET CLR + +3.0.30729; + + Media Centrum + PC +6.0) - 405 1496
13.05.2009 04:41:08 POST / Samples / LoggedSilverlightNavigation / ClientBin / nav LoggedSilverlightNavigation.xap =%% 2FViews 2FAboutPage.xaml - <adres Redacted> HTTP/1.1 Mozilla/4.0 + (compatible; MSIE +8.0 +, + Windows NT + +6.1, + WOW64; + Trident/4.0; + SLCC2; +. NET CLR +2.0.50727 +, +. NET CLR +3.5.30729 +, +. NET CLR + +3.0.30729; + + Media Centrum + PC +6.0) - 405 1496
13.05.2009 04:41:08 POST / Samples / LoggedSilverlightNavigation / ClientBin / nav LoggedSilverlightNavigation.xap =%% 2FViews 2FHomePage.xaml - <adres Redacted> HTTP/1.1 Mozilla/4.0 + (compatible; MSIE +8.0 +, + Windows NT + +6.1, + WOW64; + Trident/4.0; + SLCC2; +. NET CLR +2.0.50727 +, +. NET CLR +3.5.30729 +, +. NET CLR + +3.0.30729; + + Media Centrum + PC +6.0) - 405 1496
I kolejny dowód, ze my 3rd party statystyki narzędzie (zignorować dużych rozmiarów transfer ... oni artefaktów mojego testowania metody GET, które przeniesione kilkaset KB z każdego wniosku):

Jeśli jesteś ciekawy, aby pobrać kod (nie jest to dużo więcej niż to, co już widziałem!), Można go znaleźć tutaj: LoggedSilverlightNavigation.zip
Z całą pewnością jeszcze wiele do zrobienia, choć. Jedno Chciałabym dostać pracy w końcu jest ustawienie nagłówek Referrer na żądanie HTTP do spójnych wartości, aby można było śledzić, jak ludzie dostać od strony do strony w moim wniosków - ale to jest dobrym pierwszym krokiem.
Mam nadzieję, że pomocne! Jeśli ktoś ma jakieś inne sugestie / porady / sztuczki do nawigacji, nie krępuj się dać mi znać! To właśnie wynika z moich doświadczeń, więc jeśli masz lepszy sposób, prosimy o komentarz !
PS Nadal nie poprawne odpowiedzi na moje polowanie Pisanka od mojego ostatniego postu! Nie poddawaj się! Wyślę odpowiedź w tym tygodniu.
PPS Mark Monster ma wielki post od kilka miesięcy temu na swoim blogu o wsparcie Silverlight śledzenia w usłudze Google Analytics . Wyobrażam sobie, można użyć techniki podobnej do osiągnięcia typu zalogowaniu zrobić tutaj.
Ludzi, których znam
Ostatnie posty
- XAML, z miłości (eksperyment z Serializacja w Silverlight XAML)
- Biorąc Microsoft Silverlight 4 Wnioski Poza Przeglądarka (TechEd WEB313)
- Nawigacja wspólnego interfejsu użytkownika i autoryzacji oparte Sitemaps
- Próbek kodu i aktualizowane w komentarzach
- "Odświeżania" Authentication / Authorization doświadczenia z Silverlight 4
- Dokonywanie druku łatwiejsze w Silverlight 4
- Silverlight 4 Wydany!
- Nowego w Silverlight 4 RC: XAML hotelu
Tagi
. NET RIA Services Activity Control autoryzacji Blend BusyIndicator CollectionView ContentLoader Controls Wiązanie danych Dynamiczna nawigacja Fun Konami Code logowania MIX '10 Nawigacja Off-Topic Out-of-browser PDC PDC09 Personal Printing Projekty linki względne Server Silverlight Silverlight 3 Silverlight 3 Beta 4 Silverlight Silverlight 4 beta Silverlight 4 RC Silverlight and Beyond (płyty) Silverlight Toolkit Sitemap TechEd North America 2010 TechEd zaufanych aplikacji Validation Visual Studio 2010 usługi WCF RIA XAML XamlSerializerTwitter: @ depoll
- @ JeffHandley uważa się globalizacji. ;) 13 sierpnia 2010 08:30
- @ Rburger To niesamowite chór - warto zajrzeć, jeśli są w pobliżu 06 sierpień 2010 04:54
- @ Rburger one już raz międzynarodowych mistrzów po czasie (były zaburzenia w ubiegłym roku - po raz pierwszy od 30 lat nie wygrali) 06 sierpnia 2010 04:53
Inne Silverlight blogach - Dokonywanie Treść Przewijany 31 sierpnia 2010
- Dodawanie formantów do Atrapa Asset SketchFlow Tool 31 sierpnia 2010
- Developer Windows Client Roundup 039 do 30.08.2010 30 sierpnia 2010
Zrzeczenie się
Zawartość tej strony stanowi moje osobiste opinie i myśli w czasie oddelegowania, i nie odzwierciedlają mój pracodawca w żaden sposób.










