Archiwum

Archive for Styczeń 2015

Azure w realnych zastosowaniach: Aktualizacja paczki produkcyjnej Cloud Service bez posiadania kodu źródłowego aplikacji czyli historia z życia wzięta na produkcji

Styczeń 19, 2015 Dodaj komentarz

Dzisiaj to co opiszę to wyzwanie, które przytrafiło mi się kilka dni temu w mojej firmie CloudExpert.pl. Klient, który do mnie przyszedł musiał podmienić na stronie www certyfikat bezpieczeństwa SSL ponieważ wygasł, ale nie miał kodu źródłowego do rozwiązania, które miał postawione w chmurze – ot taki przypadek gdzie firma X, która to wdrożyła zdążyła się zwinąć i zniknąć zanim przekazała kod i dokumentację.

 

SIC!!

 

Rozwiązanie było wdrożone w Azure jako Cloud Service (czyli wysłane do azure w postaci paczki cspkg).

Pierwsza moja myśl była taka, że zaloguję się do portalu Azure, podmucham trochę na szczęście, wyślę nowy certyfikat, wpiszę jego Thumbprint w ustawieniach serwisu i już!!
Można by pomyśleć, że zlecenie zostanie wykonane w ciągu maksymalnie 1 godziny. Niestety naiwność jest tutaj kluczowym aspektem tej historii..

 

Podejście naiwne

 

Zrobiłem jak opisałem wyżej, dostałem od klienta nowy certyfikat w formacie pfx i hasło do niego. Wszedłem do ustawień serwisu w Azure do zakładki Certificates

image

i dodałem nowy certyfikat używając opcji Upload.

Potem na zakładce Configure podmieniłem w sekcji Certificates aktualny Thumbprint

image

 

Niestety po uruchomieniu strony strona pokazała mi cudownie czerwono, czarno, biały komunikat o błędzie web.config.

Widząc błąd web.config można było zobaczyć na moim czole lekki pot, nie dlatego, ze nie lubię plików web.config, ale dlatego, ze to oznaczało ingerencje w DEPLOYMENT paczki, do której przecież nie mamy kodu źródłowego, ba! nawet nie mamy paczki, która została wysłana kiedyś przez magicznych programistów do Azure.

Bardzo na tym etapie mnie zastanawiało dlaczego jest błąd web.config. Ale by tego się dowiedzieć potrzebuje go zobaczyć, a by go zobaczyć musze przystąpić do “poważniejszej pracy”.

i to tyle z mojego podejścia naiwnego.

 

Podejście zwane Praca Magika czyli zdobywamy paczkę

 

Mam kilka problemów startowych z dalsza praca. Po pierwsze by zmodyfikować web.config potrzebuje “poprosić” Azure o to by mi oddal paczkę, która została kiedyś przez programistów wysłana do chmury.

Po lekkim działaniu w R&D okazało się to możliwe sposobami cywilnymi czyli takimi, które nie wymagają wciągania do sprawy aspektu znajomości w firmie na M.

Pierwsza myśl naiwna trochę mogła by być taka, ze gdzieś na portalu mogę taka paczkę uzyskać, albo po prostu jest w jakims storage – ale nic bardziej mylnego. Musze do tego zaangażować tak zwane Azure Management API. Microsoft wystawia jest zarówno w formie serwisu RESTowego oraz SDK dla C#. Po lekkich bojach z REST poszedłem do sprawdzonego C# – ale i tu nie było tak prosto…

Aby moc z C# się podłączyć do Azure i wykonać tam jakakolwiek operacje musimy ściągnąć tak zwany profil publikowania z Azure, który jest plikiem zawierającym dwie bardzo ważne dla Nas informacje:

  • Subscription ID
  • Certyfikat w formie łańcucha znaków

Do dzieła – gdzie jest ten profil publikowania? Ano tutaj musimy (w sumie to nie musimy, ale nie mam pamięci do adresów URL) zaangażować PowerShell i to nie byle jaki bo Azure PowerShell

image

w ktorym wpisujemy komende

image

wtedy uruchamia sie okno przegladarki internetowej z logowaniem do konta Azure:

image

Po zalogowaniu ukazuje się okno z wyborem subskrypcji – wybieramy, potwierdzamy i czekamy aż ściągnie się plik na Nasz dysk.

image

i mamy to czego potrzebujemy – sekcja ID i sekcja ManagementCertificate to to czego szukaliśmy!.

Odpalamy Visual Studio, tworzymy projekt w C# aplikacji konsolowej i przechodzimy do instalowania paczki NuGET i instalujemy to co zaznaczyłem

image

przystępujemy do programowania

image

Powyższy napisany kod wymaga głębszego wyjaśnienia.

Metoda startowa Main odpala metodę w klasie statycznej, która napisałem po to by odwołać się do Azure. Ta metoda według mnie nie wymaga wyjaśnień.

To co wymaga wyjaśnień to kod metody Metoda(). Zaczynamy w niej od inicjalizacji klasy X509…, która będzie przechowywała Nasz certyfikat. Do tej zmiennej kopiujemy jako zawartość w miejsce XXX_… ciąg znaków z pliku publikowania, który przed chwila ściągnęliśmy. Certyfikat jest potrzebny do autentykacji w Azure Naszej aplikacji.

Dalej inicjalizujemy dostęp do subskrypcji podając certyfikat i subscription id, który tez mamy z pliku.

Kolejny krok to utworzenie klienta, który pozwoli “rozmawiać” z mechanizmem w Azure odpowiedzialnym za zarzadzanie serwisami z maszynami wirtualnymi (Cloud Services) – wystarczy mu podać zmienna dostępowa do subskrypcji.

Kluczowa dla Naszej operacji jest metoda BeginGettingPackageByNameAsync. To ta metoda będzie w stanie wydobyć paczkę z Azure. Ma ona jeden mankament, nie pozwala sciagnac paczki bezpośrednio, a wysłać ja na storage Azure’owy. To pociąga za sobą to ze musimy stworzyć storage w ramach Naszej subskrypcji, stworzyć tam Public lub Private Container i adres całości wkleić w miejsce adresu do Azure Storage w moim kodzie powyżej.

Niewyjaśnione są jeszcze dwa wcześniejsze parametry. Aby moc je wyjaśnić musimy przejść do Naszego Cloud serwis w portalu Azure’owym, kliknąć w niego i przejść na zakładkę Dashboard:

  • Nazwa, która widzimy w nagłówku to nazwa do wklejenia w NazwaSerwisu
  • Po lewej stronie przesuwając stronę w dol. znajdziemy pole Deployment Name i wklejamy w kolejna zmienna.
  • Po uruchomieniu aplikacji Nasza paczka na pewno będzie już na storage.

image

    Paczka nie będzie tam sama, dodatkowo Azure skopiuje do pliku konfiguracje tak zwany CSDEF, która Nam się przyda przy wgrywaniu Nowej paczki do Azure.

Kolejny krok to ściągniecie paczki na komputer, ja używam do tego narzędzia Azure Storage Explorer (https://azurestorageexplorer.codeplex.com/) – wchodzę do narzędzia, dodaje nowe konto, podaje nazwę storage i klucz dostępowy API. Przechodzimy do katalogu, w którym jest paczka i ściągamy plik CSPKG – na pewno ma wiele megabajtów.

 

Naiwności cześć druga – czyli rozłupujemy paczkę

 

Na szkoleniach opowiadam czasami o tym, ze paczka, ktora tworzy Visual Studio to plik ZIP. Nie klamie, to plik zip tylko z innym rozszerzeniem, dlatego pierwsze co robie, to zmieniam rozszerzenie pliku na ZIP i rozpakowuje.

Po rozpakowaniu widzę cos takiego:

image

widzę kilka dziwnych plików i jeden bardzo duży plik. Szukam ogólnie plików DLL i stron ASPX i nigdzie nie widzę – ciągle interesuje mnie ten plik CSSX…

…ryzykuje, zmieniam mu rozszerzenie na ZIP i próbuje rozpakować – BINGO – działa, to tez był ZIP.

Zawartość wygląda mniej więcej tak:

image

chodzę nerwowo po katalogach i BINGO po raz drugi, widzę w approot aplikacje! Myślę sobie jestem uratowany.

Szukam pliku web.config, przez który w ogóle się w to wszystko bawimy i widzę co jest nie tak:

image

Ktoś używa starego certyfikatu do usługi Microsoft Identity… myślę sobie tragedia, ale z drugiej strony podmienię zawartość Thumbprint i po sprawie.

Tak robię – podmieniam.

Nie zastanawiam się długo co zrobić dalej, przechodzę katalog wyżej, pakuje to wszystko do formatu ZIP i zmieniam rozszerzenie do CSSX, usuwam stary plik CSSX, a nowy nazywam tak samo jak stary i wkładam do pierwszego rozpakowanego katalogu. Kolejna operacja wydaje się być oczywista, pakuje całość do ZIP i zmieniam rozszerzenie na CSPKG.

Wchodze na portal, klikam w Cloud Service, wybieram Dashboard i klikam na belce dolnej UPDATE.

image

Teraz wszystko wydaje się znowu proste, wybieram w sekcji package FROM LOCAL i wybieram nowy plik CSPKG, a w konfiguracji wybieram FROM STORAGE i szukam chwile po storage gdzie jest plik, który sam Azure włożył mi na storage i działam! Daje OK i czekam i czekam i czekam i czekam… i po chwili EXCEPTION – BAD Argument. Try again. Myślicie, ze nie próbowałem? Z kilka razy. Poddałem się, nie działa.
Finalnie paczka nie zadziałała ponieważ Azure uznał, ze ktoś naruszył jej integralność, sumy kontrolne poukrywane w plikach się nie zgadzały i finalnie nie zadziałało.

 

Mierzymy siły na zamiary

 

Myślę myślę myślę i mam. Spróbuje przekonwertować paczkę na inny format, może w innym formacie da się edytować paczkę – skąd wiem o innym formacie? Słyszałem, ze są co najmniej dwa formaty tworzenia paczek do Azure. Skoro moja paczka jest w formacie X, to może format Y będzie edytowalny. Odpalam na razie CSPACK, które zajmuje się tworzeniem paczek w konsoli. Na razie znajdziemy jak uruchomimy konsole Azure CMD

image

jak wpiszemy CSPACK i damy enter to zobaczymy liste opcji. W opcjach jest m.in

image

wpisuje komendę

image

i błąd! cóż za załamanie… !!!!

Ale nie poddaje się i pobieram SDK 1.8 z strony Microsoft Azure – wersja z 2012 roku. Co za czasy…

Po zainstalowaniu uruchamiam konsole CMD dla Azure SDK w wersji 1.8 i widzę takie cos:

 

image

wpisuje komendę i

image

nie ma błędu, ale tez nie wiadomo czy działa. Faktycznie widzę na pulpicie nowy plik choć jest o polowe mniejszy, poprzedni ma 44 MB, a ten ma 21 MB. Dziwne.

Zmieniam rozszerzenie pliku NOWY.CSPKG na NOWY.ZIP i rozpakowuje i co za niespodzianka…

image

Chodzę po katalogach i brak moich plików, same dziwne pliki, np: jest tu katalog który ma tysiące plików bez rozszerzenia

image

i tym katalogiem zainteresowałem się bliżej, bo klikając na dowolny plik i otwierając go w notatniku zacząłem widzieć pliki ASPX, DLLki… czyli jakby ktoś wszystkim plikom odebrał nazwę i rozszerzenie i włożył w plaska strukturę do jednego katalogu…

Skoro tak, to gdzieś musi być spis tych plików – i faktycznie jest, jest to pik package.xml – o jeden stopień wyżej w hierarchii katalogów.

Wszedłem do pliku package.xml i zacząłem szukać web.config

image

i faktycznie był, tu tez dowiedziałem się ze web.config to tak na prawdę LocalContent/e923bf66c1114dc0b7d6888f13d6bd01 – znalazłem plik i podmieniłem mu zawartość na właściwa – w końcu to mój poszukiwany web.config

Teraz najgorszy moment, spakowalem calosc do pliku ZIP i nadalem rozszerzenie CSPKG – dalej nie wiem czemu zawartosc jest dwa razy mniejsza niz oryginal ale na razie ignoruje ten fakt. Zastanawiam sie czy portal Azure’owy rozumie ten format paczek, bo to moja jedyna przeszkoda teraz – ale co tam, ryzykuje. Wchodze jeszcze raz do okna UPDATE

image

i jak wyżej już opisywałem robię identycznie. Dodaje plik cspkg z dysku lokalnego, a plik z konfiguracja z Storage. Czekam czekam czekam… i czekam i czekam i czekam… i czekam i czekam i czekam… Widzę komunikat i nie wierze, komunikat

Completed!

 

Podsumowanie

 

Zycie pisze różne scenariusze. Siedzę w Azure już od 6 lat, widziałem sporo, wiem sporo – ale ten przypadek był bardzo ciekawy i powiem szczerze pierwszy takiego rodzaju. Klient z portalem, którego nie ma w postaci kodu, nie da się go zbudować, nie ma tez paczki i należy zaingerować w paczkę i zaktualizować portal.

To był bardzo ciekawy przypadek, intelektualnie wyczerpujący, ale ciekawy. Więcej proszę!

Kategorie:Azure

Microsoft może wyłączyć Ci w dowolnym momencie usługi hostowane w Windows 2008–sprawdź czy Cię to dotyczy!

Styczeń 16, 2015 2 komentarze

Jeden z Naszych (CloudExpert.pl) klientów zadzwonił do mnie o 4 w nocy mówiąc, że jego serwis internetowy przestał działać.

Faktycznie miał racje – serwis nie działał. Sprawa została zgłoszona do wsparcia technicznego Microsoft i w nie więcej niż kilka minut już wesoły Pan z Indii z uśmiechem na twarzy (tak wynikało z jego humoru) oświadczył, że Microsoft maszynę usunął.

1. Wsparcie techniczne Microsoft faktycznie stanęło na wysokości zadania. Dosłownie w kilka minut było wiadomo co się stało.

2. Wsparcie wyjaśniło też czemu tak się stało. Zgodnie z tym linkiem http://msdn.microsoft.com/en-us/library/azure/dn750850.aspx Microsoft pokazuje, że ma prawo od co najmniej 2013 roku usuwać maszyny, które nie spełniają “norm” systemu operacyjnego. Jeżeli mamy na maszynie zainstalowany system operacyjny o wersji niższej niż Windows Server 2008 R2 jest on “przedawniony”. Od 3 listopada po ponad roku ostrzegania na portalu oraz w emailach Microsoft rozpoczyna proces usuwania kłopotliwych maszyn.

 

Co należy zrobić?

Po pierwsze sprawdzić czy nie mamy maszyn, które mogą być usunięte. Najlepiej przeklikać każdą aplikację na portalu (dla pewności) i zobaczyć czy nie mamy informacji jak na obrazku poniżej o tym, że system jest przedawniony (patrz:WARNING):

image

Jeżeli mamy taki komunikat należy przejść na zakładkę Configure:

image

…zjechać na sam dół gdzie jest wybór systemu operacyjnego:

image

i zamienić go na co najmniej do wersji Windows 2008 R2:

image

i klikamy na dole na Save

image

Teraz już tylko czekamy około 5 minut i maszyna jest uruchomiona w nowszym systemie operacyjnym wspieranym przez Azure.

 

Podsumowanie

 

Nie chcę bronić ani klienta ani Microsoft. Chciałbym jedynie prosić o to by wszystkie emaile jakie przychodzą od Waszych usługodawców były chociażby wysyłane do działu IT. Czasami są tam bardzo ważne informacje i będziemy mogli uniknąć usunięcia ważnych danych z Naszej winy.

Z drugiej strony nie wiem czemu taka maszyna z starym systemem Windows nie może sobie po prostu w spokoju dogorywać na sprzęcie w serwerowni Azure…

Kategorie:Azure

Azure w realnych zastosowaniach: Łączymy komputery z kilku biur w jedną dużą sieć

Styczeń 7, 2015 2 komentarze

Zakupiłem do CloudExperta (www.cloudexpert.pl) MACa Mini, który ma w firmie służyć jako komputer do kompilowania aplikacji napisanych dla systemów iOS. Ostatnimi czasy tworzymy sporo aplikacji w HTML5/Cordova właśnie dla iOS i z racji braku potrzeby kupowania MACów dla każdego pracownika cały proces przebiega dobrze aż do momentu kiedy trzeba stworzyć paczkę dla sklepu AppStore.

Do teraz uśmiecham się jak sobie myślę, że znowu Apple nabrało mnie i udało im się – bo kupiłem ich sprzęt tylko po to by skompilować aplikację.

Cały proces tworzenia aplikacji i jej testowania można przeprowadzić bez budowania paczek i bez potrzeby posiadania komputera z jabłuszkiem.

Ponieważ obecnie mamy pracowników rozsianych po Poznaniu, Gdańsku, Warszawie i Katowicach potrzebowaliśmy rozwiązania, które będzie w stanie wszystkim dać dostęp do maszyny – a nie chciałem kupować ich po sztuce na biuro.

Pomysł jaki miałem to podłączenie tego komputera do prądu i Internetu, wpięcie go do sieci (wirtualnej) i skonfigurowanie tego wszystkiego tak by wszyscy pracownicy mieli dostęp do tego komputera w scenariuszu, kiedy nie mamy zewnętrznego adresu IP.

Wszystkie rozwiązania opieramy u siebie o Microsoft Cloud (Azure)

dlatego postanowiliśmy spróbować coś tu zakombinować i wykorzystać chmurę.

Na pewno ten temat tu jeszcze będę eksplorował bardziej, ale na dzisiaj warto wiedzieć, że w Azure mamy możliwość spięcia Naszych komputerów z różnych centrów danych (VNET-VNET) oraz spięcia komputerów w Naszych biurach z komputerami w Azure (Site-Site, Point-Site), mały rysunek:

VNET to VNET Connectivity Diagram

 

Zaczynamy!

Zacznijmy od podstaw. Pomysł to uruchomienie sieci VPN, do której będzie wpięta maszyna z MACOS oraz do której będą mogli się podłączyć moi pracownicy. Do sieci VPN musimy potrafić podłączyć się zarówno z systemu Windows (maszyny programistów) jak też z MACOS (maszyna do budowania oprogramowania).

Azure wspiera sieci VPN w standardzie SSTP (http://en.wikipedia.org/wiki/Secure_Socket_Tunneling_Protocol) wiec teoretycznie nie powinniśmy mieć problemu z znalezieniem klientów.

 

Microsoft Azure

Logujemy się do Panelu Azure i odnajdujemy opcje Networks

image

Klikamy Create a virtual network

Podajemy nazwę oraz region gdzie sieć będzie utworzona, ja wybieram region najbliższy Polsce.

image

W kolejnym kroku zaznaczamy Point-To-Site Connectivity – oznacza to, że z zewnątrz Azure ktoś będzie się mógł wpiąć do sieci – właśnie tego chcemy.

image

W kolejnym kroku nie zmieniamy nic i idziemy dalej.

image

W tym kroku klikamy Add gateway subnet i klikamy Zapisz (ikona OK)

image

Czekamy około 1 minuty na dodanie sieci i przechodzimy do jej szczegółów.

image

W oknie szczegółów widać, że brakuje Gateway – jest na czerwono.

image

Klikamy na dolnej belce na Create Gateway i klikamy YES. Czekamy… około 2-10 minut.

image

Po dodaniu Gateway widzimy, że kolor już nie jest czerwony – możemy przejść do kolejnych zadań konfiguracyjnych.

image

Przechodzimy na ostatnią zakładkę, która informuje Nas o tym, że nie ma certyfikatu poświadczającego Nasze połączenie – jest on niezbędny do podłączenia się kogoś z zewnątrz do sieci w Azure.

image

Wracamy do Naszego systemu i szukamy programu makecert, który pozwoli Nam taki certyfikat stworzyć – mam to szczęście mieć zainstalowane Visual Studio, które instaluje to narzędzie dlatego uruchamiam konsolę tej aplikacji i jak widać makecert jest.

image

Wpisuje komendę, która tworzy odpowiedni certyfikat.

image

W portalu Azure klikam Upload i podaje ścieżkę do certyfikatu – to plik z rozszerzeniem .cer, który przed chwilą stworzyliśmy

image

Zatwierdzam i czekam kilka sekund. Jak widać operacja przebiegła pomyślnie.

image

Wracam na pierwszą zakładkę i widzę, że obok informacji o konfiguracji sieci pojawiła się możliwość pobrania klienta dla Windows, który automatycznie skonfiguruje sieć na komputerze.

image

Pobieram!

System Windows

Uruchamiam ściągnięty program i potwierdzam chęć instalacji

image

Po zainstalowaniu w panelu sterowania zobaczę nowe połącznie, klikam dwa razy

image

Pokazuje się Aplikacja, w której…

image

Klikamy Connect i…. i… ARMAGEDON. Nie działa. W sumie nigdy nie udało mi się tak kliknąć Connect by zadziałało. Ani dzisiaj, ani miesiąc czy X-miesięcy temu.

image

Dumnie prezentujący się błąd 798. Na szczęście wiemy co należy zrobić by się udało.

Wracamy do okna z interfejsami sieciowymi i spróbujemy wyciągnąć adres, do którego próbował się wpiąć Nasz klient z Microsoftu. Musimy zmienić widok na Szczegółowy. Zobaczymy coś w rodzaju:

image

To co Nas interesuje to ostatnia kolumna – adres faktyczny do serwera VPN. Przepisujemy go.

Idziemy do:

image

i wybieramy Set up a new connection or network

image

W oknie wybieramy Connecto to a workplace i idziemy dalej

W nowym oknie potwierdzamy chęć utworzenia nowego połączenia

image

Wybieramy opcję VPN

image

Podajemy spisany wcześniej adres serwera i nadajemy nazwę

image

Po utworzeniu połączenia jest ono widoczne obok poprzedniego. Wchodzimy w opcje (properties)

image

I przechodzimy na zakładkę Security, a tam ustawiamy wszystko zgodnie z obrazkiem

image

Dodatkowo klikamy na Properties i wszystko zaznaczamy zgodnie z obrazkiem

image

Potwierdzamy.

Przechodzimy do zakładki Networking i wybieramy TCP IPv4 i klikamy Properties:

image

W oknie klikamy Advanced…

image

Odznaczamy w oknie Use default gateway on remote network – gdybyśmy tego nie zrobili to stracimy dostęp do Internetu po podłączeniu do VPN.

image

 

Po zapisaniu wszystkich zmian łączymy się z siecią. Podczas połączenia dostaniemy dwa pytania:

  • o certyfikat, wybieramy ten o nazwie identycznej z utworzonym wcześniej w systemie certyfikatem.
  • o weryfikację tożsamości serwera – akceptujemy.

Jeszcze tylko w konsoli szybkie ipconifig /all

image

i widzimy, że wszystko działa. Dostaliśmy adres IP, jesteśmy wewnątrz sieci stworzonej w Azure.

Na portalu Azure też widzimy już to połączenie

image

 

System MacOS

 

Tu zaskoczenie i ściana. Zaskoczenie ponieważ system MACOS nie wspiera połączeń SSTP, a producenci zewnętrznych narzędzi nie prowadzą sprzedaży aplikacji z tym protokołem. Szukając po projektach opensource też nie udało się nic ciekawego odnaleźć.

Pokazuje to również to, że do takiej sieci nie wpuścimy iPhone, iPad czy Windows Phone ponieważ jedyny system jaki wspiera w pełni ten protokół to Windows i Linux.

 

Rozmawiałem dzisiaj z osobami odpowiedzialnymi za narzędzia dla MacOS i podobno trwają prace. Ja się w takim razie nie poddaje i czekam, bo już 2/3 swojej infrastruktury mam ustawione:

  • Konfiguracja sieci w Azure
  • Konfiguracja stacji roboczych Windows
  • Konfiguracja stacji budujących projekt (developer machine)

 

Podsumowanie

Sieci w Azure to wspaniałe narzędzie, które pozwala wpiąć się komputerom z poza firmy albo z innych oddziałów do jednej wirtualnej sieci. Azure udostępnia Nam platformę do budowania sieci i spinania urządzeń rozrzuconych geograficznie, która według moich testów działa stabilnie.

Minus to brak wsparcia choćby dla MacOS, który w scenariuszu, który chciałem wesprzeć w swojej firmie po prostu na dzisiaj nie zadziała.

——–

Szukasz kontaktu, pisz: marcin.borecki[at]cloudexpert.pl

Kategorie:Azure Tagi: , , ,

Ile wątków angażuje proces aplikacji czyli zabawy z klasą Process

Styczeń 5, 2015 Dodaj komentarz

Dzisiaj potrzebowałem w celach diagnostycznych sprawdzić jak się ma aplikacja po kilku dniach działania na produkcji. Ponieważ proces dostępu do środowiska klienta jest skomplikowany potrzebowałem mechanizmu, który będę mógł wbudować w aplikację by diagnozowała się sama i wysyłała mi raporty o tym co się “u niej dzieje”.

Na pierwszy ogień poszła ilość wątków i ich stan. Nie od dziś wiadomo, że wątki:

  • obciążają system operacyjny – czyż nie po to choć trochę powstały Taski?
  • kosztują Nas niepotrzebnie RAM
  • mamy ich limitowaną ilość w aplikacji

Tak samo jak z połączeniami do bazy tak samo tutaj powstały mechanizmy oszczędzania wątków i możliwości pobrania ich z specjalnych pól by choć trochę zniwelować problemy opisane wyżej –> ThreadPool.

Ale czy na pewno wiemy, że zrobilismy wszystko co mogliśmy i że wszystko tam “daleko” od Naszego komputera działa poprawnie? NIE

C#/NET posiada właściwość Process.GetCurrentProcess().Threads która pozwala przeiterować i spradzić ilość oraz stan.

 

Console.WriteLine(Process.GetCurrentProcess().Threads.Count);

            for (int i = 0; i < Process.GetCurrentProcess().Threads.Count; i++)
            {
                var thread = Process.GetCurrentProcess().Threads[i];
                Console.WriteLine(thread.Id + " " + thread.ThreadState);
            }

 

W żaden sposób to jeszcze nic nie mówi, dopiero obserwacje aplikacji, ilości użytkowników, ilości wątków i ich stanów mogą mieć dla Nas finalnie sens.

Kategorie:.NET Tagi:

Microsoft Most Valuable Professional–5 rok z rzędu

Styczeń 1, 2015 Dodaj komentarz

Dzisiaj w mojej skrzynce pojawił się email – jak co roku, ale zawsze z lekką nutką niepewności od firmy Microsoft o promocji do tytułu Microsoft Most Valuable Professional na rok 2015.

Niezwykle mi miło.

image

image

W poprzednim roku widzieliśmy się na wielu konferencjach, organizowanych przeze mnie darmowych warsztatach z:

  • Microsoft Windows 8 (4 miasta, 6 warsztatów)
  • Microsoft Azure (8 miast, 12 warsztatów)
  • HTML5, programowanie interoperacyjne (6 miast, 6 warsztatów)
    Dodatkowo:
    • 6 konferencji gdzie byłem prelegentem
    • 4 imprezy "około" tematów przedsiębiorczości gdzie byłem mentorem
    • 4 imprezy typu hackaton gdzie byłem mentorem

    i w tym roku będzie podobnie. Zapraszam również do śledzenia bloga, na którym będę pisać o technologiach, z którymi się spotykam na co dzień.

 

Dla tych co nie słyszeli o programie MVP – tutaj trochę informacji:

http://pl.wikipedia.org/wiki/Microsoft_Most_Valuable_Professional

Kategorie:Microsoft Tagi: