czwartek, 29 października 2009

Obsługa błędów przez ASP.NET

W ASP.NET często rzucane wyjątki warto ładnie obsługiwać. Brak jakiegokolwiek zajęcia się nimi prędzej czy później skończy się fatalnie dla programisty: poprzez wyjawienie newralgicznych danych lub też po prostu poprzez zyskanie złej opinii.

Jednym ze sposobów ukrycia błędów przed użytkownikiem jest prawidłowe skonfigurowanie sekcji customErrors w pliku web.config. Niestety mimo wielu prób nie udało mi się uzyskać tam informacji o ostatnim błędzie poprzez metodę:

Server.GetLastError();

Rozwiązaniem znalezionym przy pomocy google jest skorzystanie z Global.asax i metody application_Error.Tam wyjątek można zserializować i wrzucić do sesji, a następnie przekierować użytkownika do ładnie wyglądającej strony.

Może rozwiązanie nie idealne, ale dotychczas spełniające swoje zadanie.

Burza magnetyczna

Znalezione:
Burza magnetyczna

A co z ludźmi posiadającymi rozruszniki serca?

Klucze:
- zniszczenie całościowe (lub częściowe) sieci elektrycznych krajów uprzemysłowionych,
- brak zapasów w postaci transformatorów gotowych do użycia,
- czas produkcji jednej sztuki to 12 miesięcy (sic!)

Duża, odnotowana burza magnetyczna:
- przy burzy średniej wielkości szacowana ilość ludzi bez prądu - 130 milionów... 4x Polska.
- miała miejsce w roku 1859 (na przełomie sierpnia i września)
- prąd indukowany w przewodach pozwalał na przesyłanie wiadomości telegraficznych mimo odłączonych baterii
- zaczęło się od plam na Słońcu - po 18h dotarły do Ziemii
- burza takiej wielkości występuje średnio raz na 500 lat

czwartek, 7 sierpnia 2008

mssql 2008

I już można pobierać :-)

MSSQL 2008 DVD Image

wtorek, 8 lipca 2008

MCSD && MCAD

No i stało się:

"

If you are pursuing a Microsoft Certified Application Developer (MCAD) or Microsoft Certified Solution Developers (MCSD) certification, we encourage you to finish it within the next twelve months. On March 31, 2009, Microsoft Learning will retire 12 exams that focus on developer and Microsoft SQL Server technologies."


Ciekawe kiedy napiszą tak o mcts .net 2.0...

piątek, 4 lipca 2008

Linq - Specified cast is not valid.

Często zdarza się, że w trakcie wstawiania/aktualizacji rekordów rzucany jest błąd: "

Specified cast is not valid."

nieszczęśliwie stos niczego ciekawego nie pokazuje. Dotarcie do przyczyny zajmuje trochę czasu a i google początkowo nie pokazuje odpowiednich wyników.

Mi udało się przegrzebać przez wyniki wyszukiwania i odpowiedź jest dość śmieszna:

Jeśli tabelka aktualizowana ma klucz obcy, do innej tabelki, której klucz główny nie jest liczbą, to klops. Ogólne przesłanie -> nie używać kluczy głównych w formie np. guid. Tylko sztuczne są dobre :-)

czwartek, 3 lipca 2008

Kiedy są problemy z ID

11.10.2007 at 01:43AM PST, ID: 20255081

Rank: Sage

Sorry, my mistake. Scope-identity doesn't work with acces

Did you try SELECT @@IDENTITY

Example
public Client CreateClient( string name )
{
OleDbCommand command = null;
Client c = new Client();
c.Name = name;

try
{
command = Connection.CreateCommand()
;
command.CommandText = "insert into Clients (name) values(@name)";
command.Parameters.Add("@name",name);
command.ExecuteNonQuery();
// Retrieve ID
command.CommandText = "SELECT @@IDENTITY";
c.ID = Int64.Parse(command.ExecuteScalar().ToString());
return c;
}
finally
{
command.Dispose();
}

wtorek, 3 czerwca 2008

HttpWebRequest i inni.

A więc dzisiaj potrzebowałem napisać aplikacyjkę do tray-a, żeby testować czy serwer działa - dłuższa historia po co. Pisany kod odczytywał jeden z plików z serwera i jeśli powiodło się, informował, że wszystko jest ok.

Niestety po kilku pętlach otrzymywałem exception Time out. Dochodzenie wskazało:

HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url + "?a=" + DateTime.Now.Ticks);
wr.ContentType = "application/x-www-form-urlencoded";
wr.KeepAlive = false;
wr.Method = "GET";
wr.MaximumAutomaticRedirections = 5;
wr.AllowAutoRedirect = true;
wr.Timeout = 6000;
wr.ReadWriteTimeout = 6000;
wr.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);
using (HttpWebResponse response = (HttpWebResponse)wr.GetResponse())
{
WebHeaderCollection headers = response.Headers;

if (response.StatusCode == HttpStatusCode.OK && !isLastVisible || isFirstTime)
{
isFirstTime = false;
ShowMessage("Serwis moto działa!", ToolTipIcon.Info);
isLastVisible = true;
ChangeIcon(true);
}
response.Close();
}

response.Close() -> winny. Prawdopodobnie response.Close() może zniknąć z tego kawałka bo using je wywoła samoczynnie, ale skoro teraz działa, to nie będę kombinował.