Archiwum

Archive for the ‘.NET’ Category

Zapraszam Cię na mini-konferencję pod nazwą Build Viewing Party 29 kwietnia w Microsoft Polska

Kwiecień 21, 2015 Dodaj komentarz

Mam przyjemność zaprosić wszystkich na organizowane wspólnie z Microsoft Polska wydarzenie (mini-konferencję) wieczorem, 29 kwietnia.

Oto zaproszenie:

Interesują Cię technologię Microsoft takie jak Windows 10, Windows Phone, Visual Studio czy HoloLens …?
Mimo szczerych chęci nie masz możliwości uczestniczenia w konferencji BUILD 2015 w San Francisco i usłyszeć o tym wszystkim z dużej sceny?

Jeżeli wszystko się zgadza – mam dla Ciebie propozycję. Zapraszam na specjalne wydarzenie organizowane przez społeczność wraz z Microsoft Polska, gdzie podczas kilku godzin będziesz mieć możliwość:

  • Zobaczenia SESJI GŁÓWNEJ (Keynote) konferencji BUILD
  • Uczestniczenia w mini-wykładach o technologiach zaprezentowanych podczas SESJI GŁÓWNEJ
  • Dyskusji z innymi uczestnikami w ramach zorganizowanych Paneli Dyskusyjnych

Będziemy na Ciebie czekać w budynku Microsoft Polska w Warszawie przy Alejach Jerozolimskich 195A na parterze. Nie zapomnij się wcześniej zarejestrować, tylko osoby zarejestrowane wezmą udział w losowaniu nagród oraz w kolacji.

AGENDA:

17:00 – 17:45 – Rejestracja uczestników

17:45 – 18:00 – Networking, dyskusje przy kawie, …

18:00 – 20:00 – Transmisja SESJI GŁÓWNEJ z konferencji BUILD

20:00 – 20:30 – Chwiila na ochłonięcie, dyskusje – KOLACJA

20:30 – 21:00 – SESJA (TEMAT BĘDZIE PODANY PODCZAS KONFERENCJI) – MARCIN BORECKI

21:00 – 21:15 – PANEL DYSKUSYJNY

21:20 – 21:50 – SESJA (TEMAT BĘDZIE PODANY PODCZAS KONFERENCJI) – MARCIN BORECKI

21:50 – 22:00 – PANEL DYSKUSYJNY

22:00 – 22:30 – Konkurs i losowanie nagród

22:30 – 23:00 – Podsumowanie wydarzenia



Konferencja BUILD w zakresie tematycznym obejmuje technologie firmy Microsoft – w tym roku Microsoft bardzo silny nacisk będzie kładł podczas wykładów na Azure, Windows 10, Office 365 oraz HoloLens.


Konferencja jest organizowana przez:

Microsoft DX (dawniej DPE)

pod patronatem

/

Dodatkowo zapewniamy jedzenie dla zapisanych!!!

 

Link do rejestracji http://buildwarszawa2015.evenea.pl/

Kategorie:.NET, Azure, Microsoft 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:

Jak zainstalować starszą wersję paczki z NuGET

Grudzień 6, 2014 Dodaj komentarz

Dzisiaj po raz pierwszy dotknęła mnie sytuacja kiedy potrzebuję zainstalować starszą wersję paczki niż ta najnowsza jaka jest dostępna w systemie paczek NUGET – paczka, o której mowa o PostSharp, a wersja to 3.1.52

Szukając rzeczowej paczki w Visual Studio otrzymuję niestety wersję 4.x

image

 

To co zrobić by zainstalować wersję starszą?

image

 

W rzeczowym oknie wystarczy wpisać  Install-Package PostSharp -Version 3.1.52

I po chwili paczka zostanie zainstalowana!

image

 

Ufff, lubię NuGET – a od teraz jeszcze bardziej – wszystko w jednym miejscu!

Kategorie:.NET, Visual Studio Tagi:

Dzień bez błędu Entity Framework dniem straconym–dziś HRESULT 2146233079

Sierpień 18, 2013 Dodaj komentarz

Niezwykle udana nocka przy migracji PlaceChallenge z EF 4 na 5 zaowocowała porannym uderzeniem jak grom z jasnego nieba… w postaci HRESULT 2146233079.

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GameInfo_DataDomain>("GetGameInfoById", gameIdParameter);
System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=Wartość właściwości EntityCommand.CommandText jest nieprawidłowa dla polecenia StoredProcedure. Wartość EntityCommand.CommandText musi mieć formę „ContainerName.FunctionImportName”.
  Source=System.Data.Entity

Błędy tego typu strasznie źle mi się kojarzą.. z jakimś złym COM/OLE/C++ I tym podobnym dziwom – a ja przecież jestem w C# jakby zapominając, że dalej jestem w Windows.

Po kilku godzinach mozna powiedzieć, że rozwiązanie proste jak drut.

Entity Framework by działać potrzebuje mieć poprawnie skonstruowany ConnectionString, który jest trochę bardziej skomplikowany od takiego zwykłego znanego z ADO.NET.

<connectionStrings>
    <add name="placechallenge_getchi_prodEntities" connectionString="metadata=res://*/DataModel.csdl|res://*/DataModel.ssdl|res://*/DataModel.msl;provider=System.Data.SqlClient;provider connection string="data source=XXXX;initial catalog=XXX;persist security info=True;user id=XXX;password=XXX" providerName="System.Data.EntityClient" />
  </connectionStrings>


Tłumacząc z języka Microsoftu na Nasz… mamy nazwę, metadane I informacje o serwerze I technologii dostępowej.

  • Nazwa – wiadomo, nie trzeba tłumaczyć mam nadzieję
  • Technologia dostępowa – tutaj SQLServer
  • Informacje o serwerze – loginy, hasła, adres do serwera, nazwa bazy danych
  • Metadane… to jest właśnie winowańca całej sprawy. W momencie wygenerowania modelu na podstawie bazy dostajemy gratis trzy pliki, jeden mapuje aktualny stan obiektów stworzonych przez EF, drugi ma spisane jak wyglada baza (tabele, kolumny, procedury, parametry), a trzeci mapuje jedno w drugie.

 

U mnie było nawiązanie do starych plików, nie nowych… I ot to mamy błąd HRESULT.

Kategorie:.NET Tagi: ,

Entity Framework 5.0, który czasami udaje 4.4–czyli jak zbudować system wersjonowania, który będzie dla nas mało czytelny I jednocześnie udawał że jest OK!

Sierpień 13, 2013 1 komentarz

Dzisiaj temat z natury “ciekawy świata” I od razu idziemy do Visual Studio. Jako przykładny architekt jednego z moich rozwiązań postanowiłem swego czasu zrobić upgrade (używając systemu do aktualizacji wersji NuGET) Entity Framework do stabilnej wersji 5.0.

Klik tu, klik tam I mam wersję 5.0. Ucieszony sobie programuje I niczym się nie przejmuje, aż tu nagle… nie wiem dlaczego pokusiło mnie by zobaczyć jaką mam wersję Entity Framework w referencjach I co się okazuje…. że 4.4!

image

Problem w tym, że wersja 4.4 oficjalnie nie istnieje (sic!). Okazuje się, że ktoś wpadł na pomysł, że poreklamuje co to ciekawego ma w nowościach Entity Framework 5 (np: obsługa typów Spatial, enum), ale pozwoli z tego przywileju korzystać tylko osobom, które zmieniają target framework rozwiązania na .NET 4.5 (sic!). Jak masz target framework na poziomie 4.0 to po cichu zamiast EF 5.0 instaluje się 4.4, który nie ma wspomnianych nowości.

No I jeszcze jedno…jak już się połapiemy, że popełniliśmy błąd (bo to przecież Nasza wina) I zmienimy wersję framework na 4.5 to dllka EF nie zmieni się na wersję 5.0. Update NuGET nie zadziała, bo przecież on uznaje, że ma najnowszą wersję (ma wpisane 5.0) w konfiguracji. Pozostaje usunąć wpis z pliku packages.config I zainstalować EF od nowa. Powodzenia Smile

Kategorie:.NET Tagi: ,

MVC 4 + Reactive Framework 2.0 robią ze mnie idiotę–czyli jak biblioteka .NET twierdzi, że nie wie czym jest .NET

Sierpień 11, 2013 2 komentarze

Czasem sobie myślę, że jeszcze jeden dzień I stracę cierpliwość do tego jak niektóre technologie ze sobą działają… współdziałają… nie działają.

Postanowiłem doinstalować wczoraj Reactive Framework (RX) do mojego świeżutkiego projektu ASP.NET MVC 4.0… I oto co zobaczyłem po uruchomieniu:

image

ogólnie katastrofa… widzę komunikat “type ‚System.Object’ is defined in an assembly that is not referenced”… a jeszcze przed chwilą było wszystko dobrze.

Okazuje się, że musimy dodać oto taką linijeczkę do web.config by wszystko zadziałało znowu jak dawniej – sekcja <system.web> w pliku web.config katalogu Views:

<compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </assemblies>
    </compilation>

I znowu działa.

Entity Framework i wstrzykiwanie otwartego połączenia–czyli wyjaśniamy czym jest Connection Polling I jak sobie z nim radzić

Sierpień 5, 2013 Dodaj komentarz

Odkrywam kawałek tajemnicy dla osób, które zamierzają tworzyć strony internetowe używane przez tysiące…. jednym z wąskich gardeł jest Baza Danych… sic! Nie będę się tu wdawał w kwestie budowania architektury, dobrej I złej. Bardziej chciałbym naświetlić pewien problem I możliwe rozwiązanie.

Bazy danych w .NET Framework w większości (zakładam, że 99% przypadków), są obsługiwane przez mechanizm ADO.NET, a ten bazuje na ConnectionString do źródła danych, który jest zdefiniowany według wzoru zgodnego z bazą do której się łączymy. Różne wzory znajdziemy tutaj – http://www.connectionstrings.com/

Różne bazy, różne wymagania, ale jednym stałym punktem jest tak zwany Connection Pooling… o których jak się okazuje niewiele osób wie.

Connection Pooling to mechanizm, który pozwala zachować (cache’ować) otwarte połączenia do bazy danych by móc je wykorzystać ponownie podczas kolejnych zapytań bez potrzeby otwierania nowych kanałów do serwera. Niewiele osób wie, że jak nie zdefiniujemy nic sami, to standardowo mechanizm jest włączony I ma limit do 100 połączeń.
Jeżeli aplikacja wykorzystuje w jednym momencie 100 połączeń do bazy (wykonuje 100 zapytań)… I próbuje otworzyć 101 to po odczekaniu odpowiedniego czasu (timeout) otrzymamy Exception. Nie jest to ciekawe…. dodatkowo mało deterministyczne, jakby to powiedział programista “U mnie działa”.

W jednym z projektów jakie ostatnio widziałem była dość ciekawa pętla, która potrafiła otworzyć kilka…dziesiąt połączeń per użytkownik, per request. Panic mode pełną parą.

Rozwiązanie tego bez znaczącej zmiany logiki wyglądało tak, że użytkownik przychodzący na serwer z swoim requestem otrzymywał jedno połączenie do bazy I to połączenie wykorzystywał do dostępów wszystkich metodach jakie wywoływał na bazie aż do zakończenia renderowania widoku.

We wszystkim tutaj pomogło użyte w projekcie Entity Framework.Standardowo kiedy tworzymy nowy Context bazy w sekcji using połączenie jest otwierane I zamykane wraz z skończeniem zapytania (sekcji using). Ciekawą funkcjonalność ma tutaj EntityFramework, która pozwala sobie wstrzyknąć otwarte połączenie (DbConnection) do konstruktora, a ten w momencie zakończenia sekcji using nie zamknie połączenia, tylko zostawi je otwarte.

Działa tutaj prosta zasada… jak Context ma wykonać zapytanie to tworzy, otwiera I zamyka połączenie. Jak ktoś mu dał jednak połączenie, to po prostu z niego korzysta, nie ubija, nie zamyka – super!