.Net, class library e web services
Descriviamo un po’ la situazione in cui ci troviamo:
- abbiamo un web service (sviluppato in ASP.Net);
- vogliamo realizzare una libreria (class library .Net 3.5) per offrire una sorta di “interfaccia comune” verso il web service in modo tale che qualsiasi applicazione (in particolare applicazioni “stand alone” .Net) possa richiamare i servizi esposti senza troppi “grattacapi”.
Come si dovrebbe procedere: da Visual Studio (2008 SP1), nel progetto della nostra class library, si passa alla creazione di un “web-reference” (in relazione al web service in questione). Non serve fare altro: sulla carta non è necessaria alcuna particolare operazione sul progetto dell’applicazione che utilizza la nostra nuova class library. In realtà, se compilate ed eseguite il programma, potrete vedere da voi stessi che l’applicativo non è in grado di collegarsi al web service.
Qui di seguito il messaggio contenuto nell’eccezzione che viene generata quando tentate di accedere al web service: “Could not find default endpoint element that references contract ‘___’ in the ServiceModel client configuration section. This might be because no configuration file was found for your application, or because no endpoint element matching this contract could be found in the client element.”
Motivo? Diciamo che i “riferimenti” o (entry point) al web service non vengono “copiati” dalla class library all’applicazione che la utilizza. Questi riferimenti sono contenuti nel file .config della class library (in dettaglio possiamo trovare tutte le informazioni all’interno del tag <system.serviceModel>). Il file .config della class libray, purtroppo, non “segue” la libreria nell’applicazione che la utilizza (se andate a vedere nella cartella bin del vostro applicativo, troverete solo il fiel .config relativo a quest’ultimo).
Il problema è aggirabile manualmente: basta copiare tutto il contenuto del tag <system.serviceModel> dal file .config della class library a quello dell’applicazione (operazione fattibile ma assai scocciante).
Qui di seguito un esempio della parte da copiare.
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="WebServiceSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" realm="" /> <message clientCredentialType="UserName" algorithmSuite="Default" /> </security> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://_/_.asmx" binding="basicHttpBinding" bindingConfiguration="WebServiceSoap" contract="_" name="_" /> </client> </system.serviceModel>
Per poter “scrivere” nel file .config dell’applicazione andate nel Solution Explorer del Visual Studio: tasto destro del mouse sul progetto in questione, andate alla voce Add nel menù che via appare ed a questo punto cliccate sulla voce New Item.

A questo punto vi apparirà una nuova finestra: selezionate General nella parte sinistra ed Application Configuration File in quella destra. Qui di seguito un’immagine che illustra le operazioni appena elencate.

Bene! Tutto il contenuto del nuovo file .config (che ritroverete nella lista dei file del vostro progetto) sarà ricopiato nel file .config “ufficiale” dell’applicazione.
Il problema sembra essere ben conosciuto, ma al momento non ho letto ancora nulla in merito ad una sua soluzione nel futuro Visual Studio 2010. Ho letto che la gestione dei file .config è stata migliorata permettendo una sorta di “diversificazione” tra debug e release, ma nulla circa il problema qui sopra evidenziato.
Nuovo evento di 1nn0va
Segnalo con immenso piacere il prossimo importantissimo evento di 1nn0va, in collaborazione con gli amici di XeDotNet, che si terrà Venerdì 10 Ottobre. La sede è la medesima dell’appuntamento precedente, ovvero il polo universitario di Pordenone (via Prasecco, 3/a 33170). L’evento inizierà alle ore 18:30.
L’argomento della serata sarà la piattaforma Microsft dei servizi Windows Live.
Il relatore sarà il bravissimo Davide Vernole (Microsft MVP per ASP.NET) che già da diverso tempo sta esplorando a fondo questa “nuova tecnologia”.
Qui di seguito il programma della serata:
- 18:30 – Apertura dei lavori
- 18:45 – Saluto ai partecipanti da parte dei presidenti delle community (Andrea Boschin e Marco Pozzan)
- 19:00 – Windows Live Platform #1
- 20:30 – Break
- 20:45 – Windows Live Platform #2
- 23:00 – Chiusura dei lavori
Per questo evento si ringraziano:
Prossimo grande evento di 1nn0va
Dopo mesi di inattività torno ad aggiornare il mio povero ed umile blog. Purtroppo gli impegni del periodo sono molti (sto tenendo un corso di Microsoft Office VISIO nelle sedi IAL di Pordenone e di Udine).
Mi preme però segnalarvi il prossimo super evento di 1nn0va: lo abbiamo chiamato WebCongress e prevede ben 4 ore di conferenze (3 interventi in totale)!
La serata è stata organizzata in strettissima collaborazione con i nostri amici di XeDotNet. Per l’eccezionalità dell’evento è stato anche “messo in piedi” un mini-sito ove potete trovare tutti i dettagli dei vari interventi, i relativi speaker, la location ed il modulo d’iscrizione.
Ovviamente e come sempre, la serata è aperta a tutti e la partecipazione è GRATUITA!
Il consiglio è, ovviamente, di non mancare!
Free E-BOOKs
E’ da un bel po’ che non aggiorno il mio umile blog… e non ho nemmeno pubblicato gli auguri per le feste natalizie! …sono uno scandalo
Mi sono ripromesso, per questo 2008, di scrivere almeno un post un giorno sì ed uno no: vediamo se riuscirò a mantenere tale media
Per farmi perdonare comincio col farvi un bel regalo… vi segnalo i seguenti e-book disponibili gratuitamente (previa registrazione) a questo url:
- Introducing Microsoft LINQ di Paolo Pialorsi e Marco Russo;
- Introducing Microsoft ASP.NET AJAX di Dino Esposito;
- Introducing Microsoft Silverlight 1.0 di Laurence Moroney.
Buona lettura a tutti!
ASP.Net Page Life Cycle with events
Questo post che ho trovato su .Net Heaven è davvero utile. Fino ad ora non ho mai trovato alcun articolo che descrivesse in modo così semplice, conciso ed efficace i vari eventi che si “scatenato” alla richiesta di una pagina ASP.Net.
Qui di seguito riporto l’immaginae che schematizza la sequenza degli eventi.

N.B.: per leggere l’articolo originali è necessario registrarsi al sito.
Forms Authentication con ASP.Net: problemi con il SqlSever
In questi giorni sto frequentando un corso di approfondimento su ASP.Net 2.0. Come tutti ben sanno per poter sviluppare con questa tecnologia è necessario disporre nella propria macchina (di sviluppo) della “triade” IIS + SqlServer (Express) + VS2005. Le possibili sequenze di installazioni di questi 3 prodotti sono numerose (3! = 6
) e, ovviamente, danno luogo a risultati diversi… insomma… spesso le cose non funzionano a dovere!
In particolare, il problema che si è presentato quest’oggi non mi permetteva di creare nuovi utenti dal Web Site Administration Tool di ASP.Net (ho scelto di usare il metodo di autenticazione basato su forms e fornito da ASP.Net, inoltre sfruttavo il web server integrato nel VisualStudio). Messaggio di errore: “impossibile collegarsi al server SQL”.
Motivo: non ne ho idea! Lo script aspnet_regsql era stato eseguito ed era andato a buon fine. Dal SQL Server Management Studio potevo vedere che il DB aspnetdb era stato creato con tutte le tabelle necessarie.
Girando un po’ per svariati siti trovati tramite Google sono arrivato alla soluzione del mio problema: è sufficcente aggiungere i seguenti tag nel web.config (del sito web in questione):
<connectionstrings> <remove name="LocalSqlServer"> <add name="LocalSqlServer" connectionstring="Data Source=PLIT6170BISSQLEXPRESS;Initial Catalog=aspnetdb;Integrated Security=True"> </add> </remove> </connectionstrings>
Il tag “connectionStrings” dovrebbe essere già presente all’interno del vostro file di configurazione.
Ovviamente inserite una “connection string” adatta alla vostra macchina!












