Skip to main content

Posts

Showing posts from January, 2011

MSMQ - mesaje in format XML

MSMQ este folosit foarte des folosit în aplicațiile destok pentru a comunica intre doua sau mai multe procese. Citirea si scrierea unui mesaj in MSMQ se face extrem de simplu:
//Creare de mesaj.
System.Messaging.Message message = new System.Messaging.Message();
message.Body = "some text";
message.Label = "Test message";

//Initializare MSMQ.
var msmq;
if(MessageQueue.Exists(@".\Private$\NumeQueue"))
{
msmq = new System.Messaging.MessageQueue(@".\Private$\NumeQueue");
}
else
{
msmq = MessageQueue.Create(@".\Private$\NumeQueue");
}

/Trimitere mesaj
msmq.Send(message);.

/Citire mesaj.
try
{
message = mq.Receive(new TimeSpan(0, 0, 10));
}
catch
{
//Executa ceva in caz de eroare.
}
Pentru a primii un mesaj, putem sa ne inregistram la evenimentul "ReceiveCompleted" a unui MessageQueue.

Daca o sa încercam sa trimitem prin MSMQ un mesaj cu conținut XML de genul:
<Text>
<Valoare>Test</Valoare>
</Text>
o sa o…

.NET framework setup hack

Pornim de la problema urmatoare: kit-uriile de .NET devin din ce in ce mai marii. De la 16MB am ajuns la 240MB in .NET 3.5. Ca printr-o minute, kitul de .NET 4.0 este de doar ~50MB(daca nu il deschidem). Dar nu va lasati pacaliti, la dezarhivare o sa ajunga lejer la 250MB.
Ce putem sa facem? Prima masară este ca setup-ul care il alegem pentru client sa nu fie web-installer, deoarece o sa omoram banda la internet intr-o firma mare fara rost. Cel mai bine este sa alegem setup-ul full. Dar nu primul link de download gasit la Microsoft pe site. Acesta de cele mai multe ori include assembly-urile pentru toate versiune de arhitectura a unei masini( x86, x64, ia64). O sa ajungem sa trimitem la client uneori de doua ori mai multe date decat are nevoie.
Totodată existe mai multe versiuni de .NET, una pentru client si una full. Cea pentru client contine assembly-urile folosite intr-o aplicatie client.
O solutie gasiti aici. In functie de arhitectura sistemului si daca aveti nevoie de versiune pent…

Care este cea mai rapida metoda pentru a obtine index-ul unui element din IEnumerable

De cate ori nu v-ati lovit de acest caz? Sa aveti un obiect de tip enumerable si sa fim nevoiti sa obtineti indexul unui element.
Exista mai multe metode pentru a rezolva aceasta problema, cea mai simpla din ele este:
obj.ToList().FindIndex( x => x =="Blog" )
Pentru cazul in care am cautat elementul care are valoarea "Blog".
Daca ne punem problema vitezei putem sa scriem noi o metoda popie:
public static int FindIndex<T>(this IEnumerable<T> elemente, Predicate<T> conditie)
{
int index = 0;
foreach (var item in elemente)
{
if (conditie(item))
{
return index;
}
index++;
}
return -1;
}
Prima optiune ne sperie putin din cauta la ToList(). Ne punem problema performantei, am prefera parca sa nu folosim ToList() si sa mergem pe metoda scrisa de noi.
elemente.Select((item, index) => new { item, index })
.Where(p…

Caz in care IValidatableObject.Validate nu este apelat

Daca in aplicatia voastra MVC in loc de Enterprise library pentru validare o sa fiti surprinsi ca exista cazuri cand metoda pentru validare nu este apelata asa cum v-ati astepta.
Folosind atributele HasSelfValidate si SelfValidate, putem sa validam un obiect. Atributul HasSelfValidate ne spune daca obiectul curent are un mecanism propiu de validare. Metoda care face validarea in interiorul obiectului nostru trebuie sa aibe atributul SelfValidation si urmatorul antet:
void numeMetoda( ValidationResults validationResults )
In cazul in care obiectul nu este valid putem sa adaugam pe validationResults mesajul dorit impreuna cu alte informatii precum: nume propietate si referinta la obiectul care nu este valid.
[HasSelfValidate]
public class Person
{
public int Age { get; set; }

public int Name { get; set; }

[SelfValidation]
public void Validate(ValidationResults validationResults)
{
if( Age < 0 )
{
validationResults.AddResult(new Validat…

Cand sa folosim HtmlString

Cand vrem sa afisam un continut intr-o pagina web, pentru a ne ferii de atacuriile de genul XSS putem sa folosim HttpUtility.HtmlEncode([continut]). Acesta va face HTML encode pe textul trimis.
HttpUtility.HtmlEncode( "<b> Test </b>");

Output-ul pentru " Test " ar fii: "<b> Test </b>".
Sunt cazuri cand nu vrem sa folosim acest mecanism, iar output-ul sa ramana acelasi. Pentru acest lucru putem sa folosim HtmlString sau orice alta clasa ce implementeaza IHtmlString.
HttpUtility.HtmlEncode( new HtmlString("<b> Test </b>"));

Output-ul pentru " Test " va fi: " Test ".

Prezentare RONUA - 12 ianuarie 2011, Cluj-Napoca

Va astept in Cluj-Napoca la o prezentare RONUA despre: Code contracts - o metoda independenta de limbaj folosita pentru a exprima si verifica automat 'ipoteze' in aplicatii .NET: preconditii, postconditii, si alti invarianti care trebuie satisfacuti de un obiect - scurta prezentare, demo, discutii (Radu Vunvulea) - durata - ~ 50 minAsynchronous programming in C# 5.0 - o introducere in suportul pentru programare asincrona ce va fi adaugat nativ la nivel de limbaj in urmatoarea versiune de C# (Tudor Turcu) - durata: ~ 45 minFiecare prezentare va fi urmata (daca se doreste) de discutii libere pe marginea subiectului.Aceasta va avea loc in 12 ianuarie (miercuri), de la orele 19:00. Locatia se va face publica luni.
Pentru mai multe informatii: http://ronua.ro/CS/groups/ronua-cluj-napoca/forum/p/8024/217417.aspx#217417
Update:Adresa intalnirii de Miercuri va fi:Strada Republicii, nr 109 - e sigma "towerul" de langa centrul comercial Sigma - etajul 3 (cum iesiti din li…

Mecanisme de autentificare: Security Token Service(STS) si Web Service Federation( WSF)

In momentul de fata aproape pe fiecare portal găsim mecanisme prin care putem să ne logam cu contul de Facebook, Y!, Google sau să facem anumite operațiuni folosind aceste conturi.
Toate aceste funcționalități sunt oferite prin mecanisme gen Security Token Service(STS).
STS a fost introdus de către Microsoft in 2005, in acest moment este folosit peste tot, inclusiv in aplicațiile din cloud( Windows Azure).
Pe baza unui singur cont pe un anumit domeniu putem să accesam și să folosim n domenii pe baza unui singur cont. Pattern-ul de baza se numeste Brokered Authentication.
Exista 3 jucători principali: clientul - care dorește sa acceseze un anumit domeniu;STS - serviciul care validează credențialele;Serviciul( domeniul) - pe care un client vrea să îl acceseze;Principiul de baza care sta la baza STS este următorul:
clientul trimite o cerere de autentificare la STS( un mesaj cunoscut sub numele de Request Security Token( RST));STS verifica credentialele și trimite un mesaj de confirmare care c…