piątek, 30 listopada 2007

Cardspace 3.5 - obsługa specyfikacji WS-SX

W codeguru.pl naprawiono upload plików, więc zfinalizowałem prace nad drugą częścią artykułu o Cardspace. W międzyczasie został wydany .NET 3.5 z Visual Studio 2008 i pojawiły się też nowe informacje o samym Cardspace 3.5.

Dla odmiany cytuję dziś samego siebie z pracy swojej. W poniższych kawałkach starałem się streścić w dużym skrócie nowe infomacje -:)

Jedną z ważniejszych zmian w Cardspace w wersji 3.5 jest wprowadzenie obsługi nowych standartów WS-SX (ang. Web Services Secure Exchange) opracowanych przez OASIS . Obecnie obok starej specyfikacji WS-Trust (Trust10) możemy korzystać z jej nowej wersji WS-SX (Trust13). Dotyczy to m.in wystawcy tożsamości IP i serwisu RP. Na podstawie otrzymanej polityki Cardspace ustala wersję specyfikacji. Gdy budujemy STS w technologii WCF, należy zastosować nowy binding WS2007FederationHttpBinding lub CustomBinding z odpowiednimi ustawieniami. Sposób przetwarzania komunikatów RST/RSTR również ulega pewnym zmianom. W przypadku web serwisu RP budowanego w WCF użyteczne są bindingi: Ws2007HttpBinding, WS2007FederationHttpBinding lub CustomBinding.

Microsoft udostępnił również witrynę http://www.federatedidentity.net/, na której możemy przetestować uwierzytelnianie za pomocą kart zarządzanych.

czwartek, 29 listopada 2007

LINQ: sztuczki składniowe C# 3.0 (2)

Kontynuacja poprzedniego postu ...

4. Wyrażenia inicjalizujące obiekty. Zamiast pisać:

Address a = new Address();
a.City = "Cracow";
a.Street = "Nowa";

zapiszmy to krócej (a kompilator wykona za nas resztę):

Address a = new Address() { City = "Cracow , Street = "Nowa" };

5. Typy anonimowe - w wyrażeniu inicjalizującym nie podajemy ... nazwy klasy:

var a = new { City = "Cracow , Street = "Nowa" };

6. Wyrażenia pytające - ta sztuczka powstaje jako ... uproszczenie zapisu wielokrotnego złożenia wyżej wymienionych sztuczek. Zapytania dotyczą wszystkich obiektów implementujących generyczny interfejs IEnumerable. Przykładowo może wyglądać to tak:

List list = new List {
new Point {M = "AAA", K = "BBB"},
new Point {M = "CCC", K = "DDD"},
new Point {M = "EEE", K = "FFF"},
};

var result = from c in list
where (c.M == "AAA" || c.M == "EEE")
select new { c.K };


Kompilator zamienia to na postać:

var result = list
.Where(c => (c.M == "AAA" || c.M == "EEE"))
.Select(c => new { c.K });


Czyli select to nic innego jak ciąg wywołań metod rozszerzających dla generycznego typu IEnumerable (zdefiniowanych w odpowiedniej przestrzeni nazw LinQ), których argumentami są delegacje zapisane w postaci wyrażeń lambda, a wynik wyrażony jest za pomocą anonimowego typu.

Korzystając również z var w prosty bardzo sposób możemy iterować wynik zapytania, np:

foreach (var s in result)
{
Console.WriteLine(s.K);
}

LINQ: sztuczki składniowe C# 3.0 (1)

Dziś dla odmiany postanowiłem zacząć porządnie zgłębiać wiedzę na temat LINQ - wszak to kluczowy element .NET 3.5. Poczytałem trochę i pobawiłem się w Visual Studio. W oglądanych wcześniej przeze mnie przykładach / prezentacjach (z wyjątkiem jednej) zasadniczo brakowało mi głębszego wyjaśnienia dlaczego składnia zapytań taka a nie inna. Trzeba to powiedzieć, że po dokładnym zapoznaniu się z wprowadzonymi "cukierkami składniowymi" C# 3.0 i ich przetwarzaniem przez kompilator od razu lepiej mi się patrzy na te zapytania (w VB 9.0 jest podobnie, choć są pewne różnice, niektórych rzeczy więcej a innych mniej w stosunku do C#). W sumie nie ma w tym wszystkim magii... Jakie to sztuczki? Oto one - w skrócie:

1. Wnioskowanie typów lokalnych zmiennych (local type inference) - nie tracimy tutaj silnego typowania, kompilator na podstawie wyrażenia inicjującego, wstawia odpowiedni typ dla zmiennej lokalnej. Dla klasy Address z propercjami City i Street wygląda to tak:

var a = new Address();
a.City = "Cracow";
a.Street = "Nowa";

2. Wyrażenia lambda - upraszczają składnię metod anonimowych wprowadzonych z C# 2.0, gdzie można było definiować delegację w stylu:

delegate( int a, int b ) { return a + b; }

Teraz możemy uprocić to do postaci:

(int a, int b ) => { return a + b; } czy też
(a, b) => a + b

3. Metody rozszerzające (Extension Methods) - są odpowiedzią na zagadkę: "W jaki sposób dodać nowe publiczne metody do istniejącej już klasy bez dziedziczenia i rekompilacji?" W zasadzie jest to przekombinowana sztuczka składniowa, bo nie jest to cud -:). W klasie statycznej definiujemy publiczną statyczną metodę, której pierwszy argument jest typu, który chcemy rozszerzyć. Stawiamy przed nim słowo this:

public static class MyExtensions
{
public static bool IsElDupa(this string s)
{
return s != "ElDupa";
}
}

Po takiej definicji zamiast pisać:

string str = "test";
bool b = MyExtensions.IsElDupa(str);

możemy zapisać to tak:

string str = "test";
bool b = str.IsElDupa();

Przy czym w tak zdefiniowanej metodzie możemy odwoływać się tylko do publicznych składowych klasy.

ciąg dalszy nastąpi ...

środa, 28 listopada 2007

ASP.NET 3.5 - ASP.NET AJAX & WCF

W ASP.NET 3.5 można wywoływać serwisy WCF z poziomu klienta JavaScript (JSON zamiast SOAP). W MSDN dostępna jest dokumentacja na ten temat z przykładami: Web Services in ASP.NET AJAX / Exposing Web Services to Client Script. Na bazie zawartych tam informacji zbudowałem sobie praktyczny przykład. Podsumowując, do udostępnienia serwisu WCF dla klienta JS, trzeba:
- dodać do serwisu atrybut AspNetCompatibilityRequirements
- w konfiguracji zdefiniować zachowania: dla endpointa z elementem enableWebScript i dla serwisu z dostępem do metadanych httpGetEnabled oraz webHttpBinding,
- w elemencie serviceHostingEnvironment ustawić atrybut aspNetCompatibilityEnabled na true.

Jeszcze ze dwa słowa o działaniu. Na stronce generowana jest linijka z adresem do generowanego kodu JS proxy (na podstawie podanej przez nas referencji do serwisu w obiekcie ScriptManager). Na stronce w swojej funkcji JS tworzymy instancję proxy (interfejsu) i wywołujemy jego metody.

ASP.NET AJAX - zabawa?

Otóż pozwoliłem sobie sprawdzić w praktyce co poniektóre zagadniernia z ASP.NET AJAX - na razie w wersji 1.0. Metody statyczne statyczne i webserwisy AJAX faktycznie wywołują się z JavaScriptu, updatePanel robi to co ma robić, a kontrolki z toolkita zachowują się tak jak się miały zachowywać. Przy czym w ostatniej wersji toolkita zauważyłem dodatkowo extendery: SlideShow (jak się łatwo domyślić - wyświetla obrazki zmieniając je co jakiś czas) oraz ListSearch (pozwalający wyszukiwać elementy w listach).

wtorek, 27 listopada 2007

ASP.NET AJAX czas zacząć ...

Przyglądając się Silverlightowi, dobrze również zapoznać się z rozszerzeniami AJAX w ASP.NET. Pozwoli to mieć lepsze rozeznanie w aktualnym stosie technologii, jakie Microsoft oferuje do budowy aplikacji webowych.

Książka Dino Esposito Introducing Microsoft ASP.NET AJAX stanowi dość dobry przegląd możliwości ASP.NET AJAX 1.0 (samodzielny framework będący rozszerzeniem ASP.NET 2.0), przynajmniej na początek. Co prawda obecnie mamy już nowszą wersję AJAX-a, zintegrowaną z ASP.NET 3.5, jednak stosunkowo niewielkie powinny być różnice między nimi (m.in w 3.5 dołożono możliwość korzystania z serwisów WCF z poziomu klienta JavaScript). Przynajmniej od czegoś trzeba zacząć ...

Patrząc na AJAX-a w wydaniu MS można wyróżnić w nim kilka zagadnień:
- Microsoft AJAX library - biblioteka ułatwiająca pisanie skryptów
- ScriptManager - podstawa wszystkiego
- częściowe renderowanie stron, m.in UpdatePanel, triggery, Timer, UpdateProgress
- AJAX Control Toolkit - pobierany oddzielnie, rozwijany razem ze społecznością, zestaw różnych zachowań do kontrolek tzw. extenderów (różne bajery, np. animacje, przesuwanie, cienie, wyskakujące okienka; ulepszone kontrolki o bardziej wypaśnych właściwościach np. textbox z podpowiedziami czy suwak) + kilka dodatkowych kontrolek
- korzystanie w JavaScript z usług ASP.NET AJAX WebService w obrębie hostującej je aplikacji lub wywoływanie statycznych metod z code-behind w obrębie danej strony
- ASP.NET Futures - ewoluacyjny zbiór rozszerzeń do ASP.NET

poniedziałek, 26 listopada 2007

Article prohibition -:(

Z przyczyn ode mnie niezależnych nie mogę od kilkunastu dni już opublikować drugiej części artykułu o Cardspace na portalu codeguru.pl z prozaicznej przyczyny: przestał działać tam mechanizm do uploadu obrazków, które w moim przypadku stanowią integralną część całej kompozycji.

niedziela, 25 listopada 2007

wtorek, 20 listopada 2007

Visual Studio 2008 Release

W zasobach MSDN pojawiła się finalna wersja Visual Studio 2008 - fakt godny odnotowania

poniedziałek, 19 listopada 2007

Silverlight - esencja i nowa wersja SDK

Ostatnio przeczytałem książkę Essential Silverlight autorstwa Christiana Wenz'a. Zawarty jest w niej opis Silverlight 1.0 w wersji release oraz krótki opis - aktualnej wciąż - wersji 1.1 Alpha z września roku tego. W porównaniu z dostepną dokumentacją i przykładami książka może nie zaskakuje, ale zbiera wszystkie informacje w sensowną, uporządkowaną całość.

Skoro już pisze dziś posta o Silverlight, to może warto dodać, że 16 listopada ukazała się nowa wersja SDK do Silverlight 1.0

wtorek, 6 listopada 2007

Cardspace 3.5 c.d.n - post mniej popularny

W cieniu prasowych doniesień o planowanych premierach, twórcy Cardspace niestrudzenie dostarczają nowych informacji na temat tej technologii w .NET 3.5.

Najważniejszą informację stanowi fakt, że aktualizacja przeglądarki Internet Explorer - pozwalająca korzystać z Cardspace na stronach Web bez SSL - jest już dostępna. Można ją pobrać z biuletynu bezpieczeństwa lub w ramach Windows Update (Cumulative Security Update for Internet Explorer 7)

Jeśli chodzi o nową funkcjonalność, to należy wspomnieć o możliwości umieszczenia przez wystawców tożsamości w pliku .crd dodatkowych informacji o sobie np. danych do kontaktu. Takie informacje nie są do niczego wykorzystywane, jedynie są wyświetlane użytkownikowi. Zapisuje się je w postaci listy typu nazwa-wartość (maksymalna długość nazw pól i ich wartości – 255 znaków, maksymalna ilość par – 20)

.NET 3.5 i VS 2008 tuż tuż - post mało oryginalny

Z pewnością informacja ta nie jest bardzo odkrywcza, niemniej uznałem ją za wartą do odnotowania za portalami z branży:

"Visual Studio 2008 oraz .Net Framework 3.5 zostaną wydane jeszcze w tym miesiącu" (TechEd 2007, Barcelona)

Powyższy rysunek pozwoliłem sobie "pożyczyć" z plakatu ze strony Microsoftu. Patrząc na niego naszła mnie pewna refleksja... Jak widać .NET rozrasta się w bardzo szybkim tempie i zaczyna się składać z wielu technologii z wydzielonymi frameworkami...
"Przyrosty" pomiędzy wersją 2 i 3 oraz 3 i 3.5 są znacznie większe od "przyrostu" między wersją 1.1 a 2.0. Powstaje pytanie, czy w niedalekiej przyszłości ogólnikowe stwierdzenie, że ktoś "zna .NET-a / C#" będzie miało sens.