.NET i takie tam

Archive for the ‘Tools’ Category

Agatha and Request/Response pattern

leave a comment »

Request/Response pattern is very simple pattern that can make our life easier when working with wcf services. The idea is to wrap all service operation parameters in one object that we call a request and return an object that we call a response. There is few advantages of such approach, the main ones (at least for me) are:

  • You can inherit request and responses from base objects where you can put some common properties like user information, security token or error message.
  • Simplifies versioning of a service
  • Generated proxy is easier to read and understand

Simple right? Sure – that is why I was surprised when I’ve read about framework that was described as a ‘Request/Response Service Layer’. Why the strait forward pattern needs a framework? Is this one of those projects that were created just for sake of creating it? I was almost ready to close the page when I saw a little bit of code that I sub conscience liked:

image
 

One class one operation? Interesting I must admit most services which I was working with – looked like bunch different procedures putted in the same file – procedural, ugly hard to read and understand. Is this possibly a solution?

Please meet Agatha – she will make your life easier or not – depends your preferences. So what this framework is doing? – simply it’s request dispatcher. There is predefined contract with one operation:

image
 

All messages are send to this operation – and Agatha based on request object type is routing it to specific handler. Basic sample can be found here. So what we gain:

  1. proper code separation for service operations – now we have handlers
  2. we can publish only one service for all implemented handlers
  3. no need to update client side proxy when service is changed
  4. authentication, authorization, error logging – can be done just in one place
  5. we can batch requests for traffic optimization – so ‘chatty’ services are not a problem anymore
  6. framework handles client and server endpoints with minimal wcf configuration

So it is nice simple and easy – but only when both client and server are using Agatha. We can still consume service in other languages but it will be awkward – request types will indicate what operation we want to call. One more issue that was actually mentioned by one of my colleagues is lack of clearly defined interface which will make service even more difficult to use by 3rd party.

In summary interesting approach for handling services. Especially if you want to use them for internal clients that you can control. But I would think twice if I had to develop something for greater audience.

You can find Agatha on GitHub. Example application is described here, and here you can find series of post describing framework in more details.

Reklamy

Written by sakowicz

Październik 29, 2011 at 8:04 pm

Napisane w .NET, frameworks, Tools, wcf

Tagged with , , ,

OMG!! My knowledge is gone!!

leave a comment »

image

Written by sakowicz

Marzec 1, 2011 at 10:22 pm

Napisane w Misc, Tools

Problem z localhost

with one comment

Dostałem nową maszynę w pracy z świeżo wgranym image systemu. Zdążyłem sobie ją skonfigurować, zainstalowałem co trzeba, pobrałem kod z repozytorium – wszystko fajne się buduje, działa jak należy – do czasu … pierwszego restartu.

Po ponownym uruchomieniu – strona nad którą jeszcze chwilę wcześniej pracowałem odmawia współpracy wyświetlają błąd 404. Ok. pewnie coś ze ścieżkami nie tak, ale nie, wszystko jest tak jak być powinno. Strona nadal wyświetla 404 – dziwne, robię iisreset nadal nic.

Wszystko idealnie się składa – za chwilę mam spotkanie z analitykiem i potrzebuję działającej strony – awaryjnie włączam laptopa i nadal szukam problemu.

Próbuję załadować inną stronę – problem ten sam 404. Ok. to już coś z IIS’em – działa (bo wyświetla 404). Czytam stronę błędu nieco dokładniej i mamy Status Code 101 – ok. sprawdzamy w Google co to znaczy – http://support.microsoft.com/kb/943891

101 – Switching protocols.

Niewiele mi to mówi ale zaczynam- grzebać w konfiguracji IIS’a – i w sumie od razu, widzę problem:

clip_image001

Próba ponownego startu, zwróciła kolejny wyjątek:

IIS Manager Error: The process cannot access the file because it is being used by another process. (Exception from HRESULT: 0x80070020)

Jakiego pliku? Dalszych poszukiwaniach w Internecie – okazało się, że może tu chodzić nie tyle o plik co o port 🙂 Teraz już było z górki – z linii komend, wystukałem:

netstat -ano

aby sprawdzić czy coś korzysta z portu 80 – Bingo! Przechodzę do Process Explorera i sprawdzam PID procesu korzystającego z mego portu i … okazuje się, że to Chrome 🙂 OK. zamykamy przeglądarkę, restartujemy IIS’a i znowu wszystko gra!!

Wszystko było by pięknie, gdyby nie zmarnowana godzina i uczucie, że już kiedyś chyba walczyłem z podobnym problemem.

Written by sakowicz

Styczeń 26, 2011 at 12:03 am

Napisane w Aplikacje, Misc, Tools

Tagged with , , ,

Aplikacyjne Alternatywy

with one comment

Natknąłem sie na fajna stronę: AlternativeTo – być może sie komuś się przyda, bo mi na pewno. Idea serwisu jest prosta, umożliwia wyszukiwanie aplikacji o podobnym zastosowaniu. Przykładowo szukamy aplikacji funkcjonalności podobnej do Adobe Photoshopa, oto co otrzymamy:

image

Niby podobne funkcje oferują, że tak je nazwę ‚agregatory’ oprogramowania jak tucows czy nasz rodzimy dobreprogramy.pl. Jednak AlternativeTo przejrzystością i prostotą bije je na głowę.

Written by sakowicz

Kwiecień 16, 2009 at 9:16 pm

Napisane w Aplikacje, Tools

Tagged with , , ,

OpenNetCF dla Visual Studio 2008

leave a comment »

Pojawiła się nowa wersja biblioteki OpenNetCF, rozszerzającej możliwości .NET Compact Framework. Nosi ona numerek 2.3 i oprócz zmian w samej bibliotece została ona przystosowana do pracy z Visual Studio 2008 (niestety nie w pełni). Zmianie uległo również nazewnictwo, obecnie mamy następujące wersje:

  • Community Edition (darmowa)
  • Standard Edition
  • Professional Edition

Porównanie wersji można znaleźć tutaj, natomiast wersję Community można pobrać z tego adresu.

Written by sakowicz

Listopad 28, 2008 at 12:24 pm

Internet Explorer Mobile 6

leave a comment »

Microsoft ogłosił nową przeglądarkę – Internet Exploler Mobile 6 – dla urządzeń mobilnych pracujących pod kontrolą systemów Windows Mobile. Jak na razie dostępne są jedynie obrazy systemowe dla developerów, sam produkt ma być, niedługo, dostępny do ściągnięcia, dla przeciętnego użytkownika.
Osobiście jakoś nie mogę się przełamać, do przeglądania stron na urządzeniach mobilnych. Główną przyczyną jest chyba uciążliwość procesu. Mały ekran, kłopotliwa nawigacja i niewielka ilość stron, które są przystosowane do wyświetlania na PDA spowodowały, że jedyne co dotychczas robiłem to ewentualne sprawdzenie poczty na Gmail (tak na marginesie mobilną wersję gmail’a można znaleźć pod tym adresem: http://mail.google.com/m). Możliwe, że teraz się to zmieni.

Internet Exploler Mobile 6 Emulator image

Microsoft zapewnia, że nowa przeglądarka jest zgodna ze starszym, desktop’owym, bratem Internet Exploler. Na ile IE jest zgodna ze standardami, nie mi oceniać, jednak wydaje się, że jeśli jest to prawda, to mamy pewien postęp. Pośród innych nowinek mamy:

  • automatyczne dopasowanie layout’u strony do ekranów mobilnych
  • rozszerzoną obsługę JavaScript (Jscript v5.7 z Internet Explorer 8
  • rozszerzone funkcje multimedialne (Adobe Flash Lite 3.1 do obsługi falsh’a)
  • lepszą integrację z wyszukiwarką
  • usprawniono nawigację
  • dodano obsługę gestów
  • wielokrotny zoom
  • dodatkowo przeglądarka umożliwia zmianę sposobu wyświetlania stron z mobilnej na standardową (desktop’ową)

Teraz tylko czekać na wydanie finalnej wersji produktu. Miejmy nadzieję, że będzie ona dostępna osobno do ściągnięcia a nie wbudowana w obraz systemu. Ciekawe też może być porównanie nowego produktu Microsoftu z mobilną przeglądarką Opery Mobile.

Written by sakowicz

Listopad 13, 2008 at 10:57 am

WordPress 2 Object

leave a comment »

Chwila zabawy z LINQ 2 XML i proszę mamy posty z WordPress’a w postaci obiektowej. Metoda:

public IEnumerable<Post> GetAllPosts()
{
    var posts = from item in _xml.Descendants("channel").Descendants("item")
                where item.Element(_wp.GetName("post_type")).Value == "post"
                select new Post()
                {
                    Title = item.Element("title").Value,
                    Url = item.Element("link").Value,
                    Autor = item.Element(_dc.GetName("creator")).Value,
                    Categories = (from t in item.Descendants("category")
                                  where t.Attributes().Count() == 2 && t.Attribute("domain").Value == "category"
                                  select GetCategory(t.Value)).ToList(),
                    Tags = (from t in item.Descendants("category")
                            where t.Attributes().Count() == 2 && t.Attribute("domain").Value == "tag"
                            select t.Value).ToList(),
                    DateCreated = DateTime.Parse(item.Element(_wp.GetName("post_date")).Value),
                    Content = item.Element(_content.GetName("encoded")).Value,
                    Status = item.Element(_wp.GetName("status")).Value,
                    Comments = (from c in item.Elements(_wp.GetName("comment"))
                                where c.Element(_wp.GetName("comment_approved")).Value == "1"
                                select new Comment()
                                {
                                    Autor = c.Element(_wp.GetName("comment_author")).Value,
                                    EMail = c.Element(_wp.GetName("comment_author_email")).Value,
                                    Url = c.Element(_wp.GetName("comment_author_url")).Value,
                                    DateCreated = DateTime.Parse(c.Element(_wp.GetName("comment_date")).Value),
                                    Content = c.Element(_wp.GetName("comment_content")).Value,
                                }).ToList()
                };

    return posts;
}

jak nazwa wskazuje pobiera wszystkie posty z pliku *.xml będącym kopią bezpieczeństwa wyeksportowaną z WordPress’a. Jednakże zanim, standardowo wygenerowany plik, będzie można załadować do obiektu XElement musimy, ręcznie, dodać jeden brakujący namespace. Mianowicie w tag’u:

<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wp="http://wordpress.org/export/1.0/"
>

musimy dodać atrybut:

xmlns:excerpt="http://wordpress.org/excerpt/1.0"

Teraz wszystko śmiga. Inna rzecz na którą warto zwrócić uwagę to sposób odczytu znaczników, np.:

<content:encoded> ...</content:encoded>

Próba bezpośredniego odczytu wartości, przykładowo:

item.Element("content:encoded").Value;

spowoduje wygenerowanie XmlException: The ‚:’ character, hexadecimal value 0x3A, cannot be included in a name. Aby pobrać tą wartość musimy się odwołać do wcześniej wymienionego namespace’u, następująco:

XNamespace _wp = @"http://wordpress.org/export/1.0/";

item.Element(_wp.GetName("cat_name")).Value;

Kod źródłowy: download.

Written by sakowicz

Listopad 10, 2008 at 11:00 am

Napisane w .NET, Tools

Tagged with , , , ,