středa 24. listopadu 2010

Když už nevím kudy kam, je čas na Fix it

FixitKdyž už nevím kudy kam, tak je načase vyzkoušet portál podpory Fix it. Je ho možné nalézt na této adrese v českém jazyce. Tato služba napomáhá řešit nejčastější problémy na stanicích i na serverech.

Celé to funguje tak, že po prvotní volbě okruhu problémů a následném upřesnění problému, portál nabídne balíčky msi ke stažení pro vlastní diagnostiku problému na postiženém PC. Po spuštění toho staženého balíčku, je provedena diagnostika a je možné zvolit automatickou opravu, je-li možná, případně je nabídnuto možné řešení problému. Pokud se diagnostickému balíčku nepodaří nalézt deklarovaný problém, případně nezná-li řešení, nabízí kontakt pro další řešení problému mocí běžné podpory.

fixitobr

Osobě mě překvapil rozsah okruhů problému a jsem tím mile překvapen.

A nakonec ještě adresa http://support.microsoft.com/fixit/cs.

čtvrtek 11. listopadu 2010

Free SEO Toolkit

framework-controls-smDnes jsem náhodou objevil zajímavou utilitu pro optimalizaci webu. Jedná se o modul který je instalován na web serveru IIS 7 a umožňuje analyzovat web. Instalace se prování standardně pomocí Web platform installeru.

Po provedení analýzy je k dispozici mnoho pohledů na web a je možné výsledky filtrovat dle potřeby vývojáře. Více informací je na webu Microsoftu, kde je ke shlédnutí i demonstrační video.

středa 10. listopadu 2010

ValidateRequest v ASP.NET 4

kruhV ASP.NET se stala změna ve validaci requestu stránky. Způsob který bylo možné používat do verze ASP.NET 3.5 již nestačí. Respektive není možné validovat request tak jak jsme byli zvyklí. K tomu aby vše fungovalo jako zastara je nutné přidat je do web.config souboru toto nastavení:

<system.web>
<httpruntime requestvalidationmode="2.0" />
</system.web>

Tímto nastavení povolíme režim validace jako ve verzi ASP.NET 2.0 a problém vyřešen.

Celý problém vznikl tím, že od verze ASP.NET 4.0 jsou validovány všechny všechny požadavky a tak k vyhození vyjímky dochází již při volání http handleru.

Pokud by jsme chtěli využívat nové možnosti validace, které nám umožňuje ASP.NET 4.0, můžeme tak učinit napsáním vlastních validačních providerů.

Více informací naleznete ASP.NET 4 Whitepaperu.

čtvrtek 4. listopadu 2010

Stahování zabezpečeného obsahu z webu

zamekDneska to bude velice krátké, ale doufejme smyslu plné a budeme se zabývat stažením obsahu z internetu přes http protokol.

Pokud chceme stáhnout programově nějaký obsah z internetu, tak to není problém a způsobů je několik. Jedním z nich je použití objektů HttpWebRequest a HttpWebResponse ze jmeného prostoru System.Net. Příklad stažení obsahu webové stránky je zde:

HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(@"http://www.hrncir.info");
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream stStream = httpResponse.GetResponseStream();
StreamReader strReader = new StreamReader(stStream);

string sResult = strReader.ReadToEnd();

httpRequest.Abort();
httpResponse.Close();

Nicméně pokud se bude jednat o obsah zabezpečený, tento způsob nám nebude nic platný. V ten okamžik ale můžeme standartnímu serverovému zabezpečení vyhovět tím, že přidáme požadované pověření. Pro změnu si v příkladu stáhněme XML dokument ze zabezpečené složky na serveru kdesi na internetu:

HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(@"http://www.hrncir.info/protected/document.xml");
httpRequest.Credentials = new NetworkCredential("username", "password");
HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse();
Stream stStream = httpResponse.GetResponseStream();

XmlDocument xdXml = new XmlDocument();
xdXml.Load(stStream);

httpRequest.Abort();
httpResponse.Close();

Na závěr jenom zmíním alternativu k tomuto způsobu stahování dat a to objekt WebClient ze jmeného prostoru System.Net ,který umožňuje to samé co dnešní příklady a ještě mnoho dalšího.


úterý 2. listopadu 2010

Serializace dat

krabiceDnes se podíváme na jednu užitečnou věc a to na serializaci dat do binární podoby. Občas se tato věc může hodit. Z vlastní zkušenosti můžu nabídnout jeden scénář a to, při ladění jedné aplikace bylo třeba uchovat informace obsažené v jedné třídě. Řešením bylo celý objekt zaserializovat a uložit do databáze v binárním tvaru spolu s dalšími informacemi. Pokud bylo třeba se k obsahu třídy vrátit, nebyl to problém a stačilo pouze deserializovat binární data z databáze a třída naplněná daty byla opět k dispozici.

No a jak na to? Princip je celkem jednoduchý, vezmeme objekt který chceme serializovat, například string a za pomoci objektu BinaryFormatter ho serializujeme do poměti. Poté z paměti uložíme po pole bytů a je hotovo.

BinaryFormatter shBF = new BinaryFormatter();
byte[] ArrayByte;
string sText = "Hello world";
using (MemoryStream strMemory = new MemoryStream())
{
shBF.Serialize(strMemory, sText);
ArrayByte = strMemory.ToArray();
}


Pokud bychom zatoužili po deserializaci takto serializovaných dat, dá se říci, že použijeme stejný postup s tím, že použijeme metodu pro deserializaci a vstupem budou logicky binární data a výstupem data původní, v našem případě opět typu string.
BinaryFormatter shBF = new BinaryFormatter();
string sText;
using (MemoryStream strMemory = new MemoryStream(ArrayByte))
{
sText = (shBF.Deserialize(strMemory)).ToString();
}

A to je principiálně vše, nicméně by se asi hodilo to nějak zaobalit a ještě nebýt tak závislý na typu objektu, který chce serializovat nebo deserializovat. K tomu se nám bude hodit možnost využívat šablony. Takže je vhodné vytvořit třídu, která bude s takovou šablonou pracovat a do ní umístit dvě metody pro serializaci a deserializaci dat.
public class Serialize<Template>
{
public Serialize()
{
}
public byte[] GetSerialize(Template T)
{
BinaryFormatter shBF = new BinaryFormatter();
byte[] ArrayByte;
using (MemoryStream strMemory = new MemoryStream())
{
shBF.Serialize(strMemory, T);
ArrayByte = strMemory.ToArray();
}
return ArrayByte;
}

public Template GetDeserialize(byte[] ArrayByte)
{
BinaryFormatter shBF = new BinaryFormatter();
Template T;
using (MemoryStream strMemory = new MemoryStream(ArrayByte))
{
T = (Template)shBF.Deserialize(strMemory);
}
return T;
}
}
A tím jsme hotovi. Ještě pro úplnost přikládám tuto přeloženou třídu SH.Utils.Serialize.dll a celou testovací aplikaci.