martedì 23 marzo 2010

XML jquery 1.4 IE 8 vs FF 3.6

Un titolo che è tutto un programma... cercherò di fare luce nell'ombra che io stesso ho proiettato.

Problema: IE 8 usando jQuery traduce l'XML in un modo diverso da FireFox 3.6, eppure la cosa è strana....
e tanto...

Ho realizzato un Web Services che crea un semplice XML nulla di eccezionale, poi tramite una banalissima
chiamata in POST con jQuery eseguo una parserata del XML, per costruire una table.

Morale IE8 legge sulla 80 l'xml è FF 3.6 pure, per altro mi sono scaricato vari tool per leggere l'xml in
modo da comprendere qualche dettaglio in più rispetto a quanto prodotto dal WS. e per tutti la presentazione
è UGUALE...

Quindi è l'interprete di FF 3.6 che differisce da IE... ( o uno lo scarta o l'altro lo aggiunge )
Quindi mi trovo su FF un tag TextElement che contiene "\n"... e la relativa tabulazione...

Nasce naturale la domanda: chi crea questo tag ??? utilizzando un tool per leggere l'xml.. questo tag non c'e'
provando a fare una scansione dei nodi con c#... il tag non c'e' ...

Questo perchè (credo) IE C# il prodottino condividono la stessa base per leggere l'xml.... quindi rimane
il povero FF ...

E dato che non è semplice.. mettere in single line tutta una data table... mi sa tanto che mi converrà
aggiungere un controllino per quel che sto leggendo da jQuery.


Morale... quando qualcosa non va.. gli strumenti giusti (fire bug) servono a trovare gl'inghippi...

lunedì 22 marzo 2010

Pubblico il Web Services e non va ...

Create il vostro web services, lo pubblicate su un server remoto interrogate il vostro web services
Autorizzazione negata....
Cosa fare ..
Cambiate la dicitura nel web config...
customErrors mode="Off"
In questo modo riuscite a vedere l'errore vero ...


interrogate il vostro web services
Request format is unrecognized for URL unexpectedly ending in '/[webMethodName]'.

Se state lavorando con il fw 2.# è possibile che per pura rogna dobbiate esplicitare nel web.config q
ualcosa in più tipo:
[system.web]
[webServices]
[protocols]
[add name="HttpGet"/]
[add name="HttpPost"/]
[/protocols]
[/webServices]
[/system.web]

Va da se la considerazione del perchè un Web ( e ci tengo a precisare .. "WEB") services debba necessitare
l'esplicitazione dei verbi... GET E POST....

Tuttavia fatto questo il gli errori spariscono e tutto funziona...

giovedì 18 marzo 2010

Grammaticalmente parlando...

"avere troppe scelte coincide con il non avere scelte"....
Giuro non ricordo l'autore di questa frase ma gli do' merito a catinelle...

Credo che tutti noi abbiamo nel nostro piccolo una misera applicazione di test che contiene tutti i nostri esperimenti i nostri casi di studio.. i più bravi iniziano con dare anche dei nomi utili alle soluzioni di studio ( quelle da 5 min di prova ) il tempo passa si aggiungono form su form ... e poi ... MA QUESTA E' UN’ALTRA STORIA.

Che differenza c'e' ???
Double? myVar;
Double myVar = null;
Double myVar = Double.NaN;

Quasi nessuna .. forse se avessimo un allegro 386 vi consiglierei di usare la prima dicitura...

Ma perchè consentire 3 modalità differneti per scrivere la stessa cosa ??

Ingenuamente ce ne basta una "la seconda" in questo modo abbiamo la certezza che myVar sia Null...
Ingenuamente "la terza" ci da la certezza che myVar sia "il null per il double"...

Ma ancora una volta ritengo che l'eleganza e la leggibilità debba essere premiante rispetto al resto.

Ed è incredibile quanto un "null" possa cambiare le cose.. !!

martedì 16 marzo 2010

ConfigurationManager / ConfigurationSection

Il web.config è nostro amico ??
Molti credo troppi, non conoscono le vere potenzialità di questo elemento. La letteratura sull'argomento è però molto molto sostanziosa.

Ma per l'appunto il web.config è davvero un nostro amico ?? SI certo che si, basta saperlo sfruttare bene.

Parafrasando i tanti esempi che si possono trovare sul web si possono ottenere mille e milli utilizzi, mille scopi e mille interpretazioni. Nel mio caso come più volte è capitato lo scopo è di presentare una funzionalità e di lasciare al lettore
la possibilità di estendere quanto ha letto con la sua realtà.

Partiamo però da una necessità:
- per un web method di un web services ci serve una particolare configurazione.
- questa è riassumibile con gli attributi "ip,hostName";

va da se che è un perfetto esempio di livello 0.

Creiamo quindi una classe che abbia quest'aspetto...

public class MySpecialConfiguration: ConfigurationSection
{
[ConfigurationProperty("IP")]
public string IP
{
get { return (string)base["IP"]; }
}

[ConfigurationProperty("hostName")]
public string hostName
{
get { return (string)base["hostName"]; }
}
}

Questa classe Estende configurationSection e aggiunge due attributi (IP, hostName).. entrambi come string..

Ora nel web Method...

MySpecialConfiguration msc = ConfigurationManager.GetSection("MySpecialConfiguration") as MySpecialConfiguration;
this.IP = msc.IP;
this.hostName = msc.hostName

tramite il configurationManager.GetSection ([nome]) recuperiamo il nome della section che ci serve.

MySpecialConfiguration msc = (MySpecialConfiguration) ConfigurationManager.GetSection("MySpecialConfiguration");

E' la stessa cosa, scegliete voi come scriverla...

E ora ... la parte clue... il web.config... ( ricordatevi che [ /] che devono essere viste come maggiore e minore...)

[configuration]
[configSections]
[section name="MySqlParameters"
type=" thisSample.MySpecialConfiguration, thisSample" /]
[/configSections]

Che cosa diavolo è type ??? thisSample.MySpecialConfiguration è il nome della classe che abbiamo implementato prima
mentre thisSample è l'assembly

Questa è la dichiarazione della nostra section, ma ci serve anche

[MySqlParameters
IP="127.0.0.1"
hostName="nudrubufu"/]

al richiamo del web method verranno letti i parametri di configurazione...

A ben pensarci questo è proprio tutto quello che serve per aggiungere le proprie "specia conf" al web conf...