Technology Experience

.NET World

Programmazione, libri, snippet di codice, articoli tecnici

.NET World

Un domain-model con WCF (oggetti DTO e dintorni)

Qualche giorno fa ho proposto sul mio blog l’implementazione di due interfacce diverse da utilizzare con WCF.

La prima implementazione di IFatturazione espone due metodi che ritornano l’XML che rappresentano i tipi:

[ServiceContract()] public interface IFatturazione { [OperationContract] string GetXmlArticolo(string Codice); [OperationContract] string GetXmlCliente(string Codice); }

Il primo GetXmlArticolo prende in input il codice dell’articolo e ritorna l’XML dell’istanza di Articolo ottenuta – in pratica, la serializzazione dell’istanza dell’oggetto. Sul client del servizio WCF, la stringa viene deserializzata per ottenere l’istanza dell’oggetto stesso. In questo caso non ho bisogno di oggetti DTO, perchè l’unica cosa che viaggia avanti ed indietro su WCF sono stringhe, o comunque tipi semplici.

La seconda implementazione di IFatturazione è un po’ più forte dal punto di vista del domain-model. Vediamola:

[ServiceContract()] public interface IFatturazione { [OperationContract] ArticoloDTO GetArticolo(string Codice); [OperationContract] ClienteDTO GetCliente(string Codice); }

Questa interfaccia non passa da XML, ma ritorna direttamente le istanze degli oggetti. Il buon Fabio, autore del libro in allegato ad IoProgrammo, mi ha lasciato un commento che dal punto di vista teorico mi sembra assolutamente incontestabile. Dal punto di vista pratico, invece, ho trovato notevoli perplessità ed un certo complicarsi delle cose. Vi voglio dire dove per arrivare assieme ad una soluzione.

Giustamente, Fabio dice che occorre creare DTO per ogni tipo che voglio utilizzare con WCF. Nel semplice esempio qui sopra, devo creare ArticoloDTO e ClienteDTO. Praticamente, il numero delle classi raddoppia. Non solo: devo decorare ogni classe con l’attributo [DataContract], ed ogni proprietà con l’attributo [DataMember]. Ma questo è il lato semplice della cosa. Sebbene avessi già chiaro il concetto di oggetto DTO, ho preso spunto dai post di Emanuele sul Muro di UGIdotNET, che spiega due metodi diversi (uno e due) su come implementare oggetti DTO.

Nel primo metodo, ed applicandolo al mio semplice caso, la classe ClienteDTO eredita direttamente da Cliente. Sarà la classe ClienteDTO che decorerò con [DataContract]. Peccato però che WCF obbliga anche la classe base ad essere decorata con questo attributo, rendendo di fatto la cosa impossibile se non si dispone del codice sorgente del domain-model. Ma non solo in questo: se volessi mantenere il più possibile il mio domain-model, dovrei evitare di sporcarlo con attributi specifici di una certa particolare tecnologia. Sarà anche una mia fissa, ma il mio domain-model non lo tocco: così l’ho fatto due anni fa, così lo voglio mantenere. Quindi, di fatto realizzare oggetti DTO con l’ereditarietà mi trova contrario.

Nel secondo metodo, la classe ClienteDTO incapsula al suo interno un membro privato di tipo Cliente. Il costruttore di ClienteDTO si preoccupa di prendere in input un’istanza di Cliente con la quale settare il membro privato. Poi, è sufficiente implementare ogni proprietà pubblica che voglio esporre all’esterno. Ancora una volta, la classe DTO deve essere decorata con [DataContract], mentre ogni proprietà con [DataMamber]. Qui è doppiamente scomodo, perchè sono costretto ad implementare una ad una ogni proprietà. Ma la cosa più grave, a mio avviso, è che con l’incapsulamento non posso castare ClienteDTO a Cliente. Quindi, il client di WCF riceve un’istanza di ClienteDTO, che non sa come trasformare in Cliente e di conseguenza, non può più utilizzare in modo naturale il domain-model. Piccola nota: la classe ClienteDTO potrebbe esporre una proprietà pubblica di tipo Cliente, che serva a tirar fuori il membro privato. In questo modo, sarebbe possibile scrivere una linea di codice come questa:

Cliente cl = clienteDTOfromWCF.Cliente;

Cioè, posso ottenere l’istanza di Cliente chiedendola direttamente ad un’istanza di ClienteDTO. Ma anche questa strada non è percorribile, perchè significa decorare con [DataMember] la proprietà pubblica Cliente della classe ClienteDTO. E, di nuovo, torniamo al punto di partenza…cioè…devo mettere mano al sorgente del domain-model, perchè in fase di compilazione mi viene giustamente detto che anche la classe Cliente deve essere decorata con [DataContract].

Stasera finisco qua. Ho appena finito un paio d’ore di sviluppo su WCF, e questo post rappresenta un po’ di punti critici che ho incontrato e che sinceramente non so come risolvere. La prima implementazione di IFatturazione è l’unica che riesco ad utilizzare con produttività, proprio perchè viaggiano solo stringhe, generate dalla serializzazione di oggetti, che subiscono l’operazione inversa lato client.

Technorati Tags:   

Send to Kindle
.NET World

Modificare la skin di Subtext

Venerdì mattina mi ha venuta la voglia di modificare la skin del mio blog che state leggendo. Al contrario di Mighell, che se ho ben capito ha litigato più per il lato estetico, io mi sono sforzato di raggiungere un solo e semplice obiettivo, cioè integrare nella parte sinistra della pagina Web tutte le informazioni che mancavano. Ad esempio, sul mio vecchio blog UGIdotNET avevo l’elenco di tutte le categorie e l’elenco dei mesi/anni di attività del blog stesso. Queste informazioni fino a venerdì mancavano del tutto nello skin attuale.

Così, dopo una breve chiaccherata con Simone per avere qualche informazione utile, mi sono dato da fare e ho risolto tutto nel giro di pochi minuti.

La prima cosa da fare è aprire con un qualsiasi editor HTML il file /Skins/<template_name>/PageTemplate.ascx. Al posto di <template_name> bisogna ovviamente mettere il nome della skin che state utilizzando. Nel mio caso, la skin è lightz. Dopo averlo aperto, è sufficiente aggiungere lo UserControl sia all’interno del <div id=”menu”>, sia all’interno del blocco iniziale <%@ Register … />.

Nel mio caso, ho dovuto aggiungere lo UserControl contenuto all’interno del file SingleColumn.ascx, quindi:

<%@ Register TagPrefix="uc1" TagName="SingleColumn" Src="Controls/SingleColumn.ascx" %>

e più sotto…

<uc1:SingleColumn id="SingleColumn1" runat="server"></uc1:SingleColumn>

Ovviamente la posizione è a vostra discrezione e non c’è alcun vincolo. Adesso – finalmente – chi raggiunge il mio browser vede sul lato sinistro le varie categorie ed i mesi di attività del blog, che è partito l’Aprile scorso. Mi piace molto, perchè in questo modo è un po’ più “navigabile” e user-friendly, ma magari è solo la mia impressione.

Ultima nota sugli UserControl. Con le ultime release di Subtext è supportata anche la Tag Cloud: è possibile specificare quanti elementi visualizzare modificando la proprietà ItemCount. All’inizio il mio skin ne visualizzava solo 20, io l’ho aumentata a 50 ed adesso la mia Tag Cloud è un po’ più popolosa.

Se ho detto qualche bestialità (cosa probabile, trattandosi di ASP.Net e dintorni), perdonatemi, ma la mia competenza è quella che è, in questo campo. Fate così: rivolgetevi ad un maestro del settore, o comunque a qualcuno di vostra fiducia come faccio io. Cosa può esserci di meglio che uno dei creatori di Subtext? 🙂

Technorati Tags:    

Send to Kindle
.NET World

Interfacce da utilizzare con WCF: consigli?

Senza scendere nei dettagli di WCF, è chiaro come client e server comunichino fra loro attraverso un’interfaccia. Supponiamo di aver definito un’interfaccia IFatturazione che espone i seguenti membri pubblici:

[ServiceContract()] public interface IFatturazione { [OperationContract] int GetImportoFattura(string denominazione); [OperationContract] string GetXmlArticolo(string Codice); [OperationContract] string GetXmlCliente(string Codice); [OperationContract] string GetNuovoNumeroFattura(); [OperationContract] bool SalvaFattura(string xmlFattura); }

ServiceContract ed OperationContract sono due attributi che fanno parte del mondo WCF per identificare quando una certa interfaccia funge da contratto per un servizio, e quali sono i metodi che devono essere esposti attraverso la comunicazione. Pensandoci bene oggi pomeriggio, sono arrivato ad un’altra possibile definizione dell’interfaccia, cioè questa:

[ServiceContract()] public interface IFatturazione { [OperationContract] int GetImportoFattura(string denominazione); [OperationContract] Articolo GetArticolo(string Codice); [OperationContract] Cliente GetCliente(string Codice); [OperationContract] string GetNuovoNumeroFattura(); [OperationContract] bool SalvaFattura(Fattura fattura); }

La grande differenza fra le due è che la prima espone tipi base del .NET Framework: i metodi ritornano tipi come int, string e bool. I parametri di input dei metodi sono tutti di tipo string. La seconda invece è un po’ più consistente e forte per il domain model sul quale sto sviluppando: i metodi ritornano oggetti come Articolo, Cliente oppure prendono in input istanze di Fatture. Ad una prima analisi, dal mio punto di vista la seconda interfaccia sembrava migliore, però mi ha obbligato ad effettuare alcune operazioni:

  1. I tipi che devono essere trasmessi (Articolo, Cliente e Fattura) devono essere decorati con l’attributo DataContract. Cosa che non è sempre possibile, per esempio quando non disponiamo del sorgente dei tipi appena citati. Nel mio caso non è così, però, come ragionamento ci sta.
  2. La prima interfaccia mi dà l’impressione di essere più interoperabile. D’altra parte, non fa altro che mandare avanti ed indietro stringhe in XML, o comunque di ritornarmi tioi semplici. La secondo no. Ditemi se sbaglio.

Alla fine ho scelto la prima implementazione di IFatturazione.

Sul server ho messo del codice che serializza oggetti e li restituisce come XML al client. Per esempio, se il client esegue il metodo GetXmlCliente passando un certo codice, viene creata un’istanza dell’oggetto, i valori delle proprietà vengono lette da database. Poi l’oggetto viene serializzato in uno StringWriter e restituito al client. Ecco il metodo che fa da helper a questa funzionalità:

static string getSerializedObject(Entity instance) { XmlSerializer ser = new XmlSerializer(instance.GetType()); StringWriter output = new StringWriter(); ser.Serialize(output, instance); output.Flush(); output.Close(); return(output.ToString()); }

Sul client c’è del codice che fa l’esatto opposto, cioè da una stringa XML deserializzo per ottenere l’istanza dell’oggetto. Vero che così facendo ho aggiunto un po’ elaborazione aggiuntiva, ma ho preferito fare così. Se anche voi sviluppate con WCF, mi piacerebbe sapere cosa ne pensate, perchè sicuramente siete passati anche voi da una situazione di questo tipo. Come l’avete risolta? Perchè?

Technorati Tags:    

Send to Kindle
.NET World

RapportinoMaker cresce, e sfrutta WCF

Vi ho già parlato altre volte (forse troppe) del mio piccolo RapportinoMaker. Eppure, vi dirò, nella sua semplicità mi permette di esplorare, disegnare e sfruttare componenti che altrimenti non avrei mai visto. Vi faccio un piccolo riassunto perchè ci tengo.

RapportinoMaker è un software che gira dalla console di Windows. Accetta al massimo due argomenti: il mese e l’anno di cui si vuole generare il rapportino. Quindi, per esempio, possiamo lanciarlo con una riga simile a questa:

Dopo aver premuto Invio, RapportinoMaker apre il database di Outlook, preleva tutti gli appuntamenti del mese e dell’anno passati come input e conta quanti giorni ho lavorato. Il conteggio si basa sull’oggetto dell’appuntamento: se è una determinata stringa, allora l’appuntamento viene preso in considerazione, altrimenti…nisba.

Determinato il numero di giorni effettivamente lavorati (per esempio 20), posso generare due cose: il rapportino su un foglio Excel e la fattura. Parliamo di quest’ultima. Tutto il database della mia fatturazione è online, adeguatamente protetto, su un server SQL 2005 disponibile via Web. Tecnicamente parlando, se non ci sono firewall o regole particolari, RapportinoMaker potrebbe aprire una connessione verso il server SQL ed aggiungere record nelle tabelle per generare la fattura. Questo può ovviamente essere ottenuto sia con istanze di SqlConnection/SqlCommand, sia con architettura basata su NHibernate.

Capita però di dover utilizzare RapportinoMaker in ambienti dove il mio SQL Server è irraggiungibile. Vuoi per qualche firewall, vuoi per qualche restrizione dei responsabili di rete, RapportinoMaker non riesce a completare il lavoro per cui è stato progettato mesi e mesi fa. Se lo uso a casa, non ci sono problemi, ma quando lo uso sul lavoro, qualcosa non va.

Ecco il motivo per cui ho deciso di studiare WCF. Esponendo un servizio WCF sulla porta 80, RapportinoMaker non comunica più direttamente verso il database, ma sfrutta un servizio che lo fa per lui. RapportinoMaker comunica con il servizio tramite un’interfaccia IFatturazione che espone metodi per caricare e salvare articoli, clienti e fatture. Adesso si è fatto davvero tardi, ma mi riprometto in futuro di parlarvene, se non altro per darvi qualche infarinatura su come creare un servizio WCF, dal momento che potrebbe davvero essere utile a tutti voi. Come al solito, stay tuned!

Technorati Tags:    

Send to Kindle
.NET World

Certificazione di Virtual Earth – Developing

In passato ho scritto moltissimi post su come ottenere varie certificazioni .NET. Quando ho letto questa mattina la notizia dell’esame di certificazione per Virtual Earth, la prima cosa che ho fatto è stato ridacchiare, perchè mi son detto: “Cosa cavolo servirà una certificazione per Virtual Earth?“. Poi però ho pensato al suffisso Developing, e giustamente ho pensato che probabilmente (dico probabilmente non lo so per certo) Virtual Earth espone un’API grazie alla quale possiamo sfruttare tutte le potenzialità di un software geomapping nelle nostre applicazioni. Ed allora qui le cose cambiano.

Non so per certo come sia complessa l’API esposta da Virtual Earth, ma posso immaginare che tanto semplice non sia, e forse una certificazione in tal senso possa essere utile per “distinguersi” da altri sviluppatori che magari non si sono così specializzati in un settore particolare.

Technorati Tags:  

Send to Kindle
.NET World

L’ultimo numero di IoProgrammo è un po’ in palla

In questi giorni ho sfogliato e letto alcuni degli articoli di IoProgrammo. Vi vorrei anche parlare dell’articolo sulla programmazione managed del buon Mighell, ma non ho ancora avuto il tempo di leggerlo e pensarlo con calma. Una cosa però è certa: sull’ultimo numero ci sono due svarioni che lasciano a bocca aperta.

A pagina 33 c’è un articolo su PHP 5.0 che illustra le nuove features sulla OOP, quindi ereditarietà degli oggetti, polimorfismo e così via. Il mio vecchio sito www.igordamiani.it, che adesso punta direttamente a www.vivendobyte.net era completamente sviluppato in PHP, e quindi ogni tanto mi fa piacere leggere qualcosa su questo linguaggio Web. Peccato che a fianco ci sia un trafiletto sui tipi di documento gestiti nativamente da WPF, come gli FlowDocument, gli FixedDocument, il layout e simili, che con PHP non hanno nulla a che fare. Mi piacerebbe capire se è un problema causato dalla redazione, oppure se l’autore ha trasmesso il materiale dell’articolo sbagliato: se ben ricordo, il testo delle note a margine deve essere scritto in un documento Word separato, quindi potrebbe anche essere che Alessandro Lacava, autore dell’articolo, abbia sbagliato qualcosa. Glielo dico, vediamo cosa dice. 🙂

L’altro errore è a pagina 44: c’è un articolo su come realizzare un CAPTCHA per i propri siti Web. Ci sono due screenshot della pagina Web: in una didascalia dice: “Il test CAPTCHA fallito“, l’altra dice: “Il test CAPTCHA superato“. Peccato che le due immagini siano le stesse e facciano entrambe riferimento al test fallito. Questa è una cosa di poco conto, però c’è.

L’altro errore è a pagina 85: c’è un articolo sul networking di Java. Peccato che nei requisiti si dica che le conoscenze richieste siano Microsoft .NET e Visual Studio 2005. Ehm…non mi sembra proprio. 🙂

Igor, che è la metà cattiva di Liborio, oggi si è svegliato in modalità polemica e pignola, e quindi non ho potuto fare a meno di bloggare. I’m sorry!

Technorati Tags:   

Send to Kindle
.NET World

Deployare un servizio WCF con gli assembly

L’ultima volta vi ho fatto vedere quali accorgimenti bisogna attuare per deployare un servizio WCF su un hosting come WebHosting4Life. Il riassunto in breve è questo. Supponiamo di avere in hosting un url come il seguente:

http://www.miosito/wcf

La directory wcf deve essere impostata come .NET Application, su un application pool dedicato oppure condiviso con altre applicazioni. All’interno della directory wcf dobbiamo mettere il Service.svc ed il web.config che danno tutte le informazioni necessarie al .NET Framework per poter far partire il servizio WCF. Nel primo c’è il nome della classe che implementa il servizio, il nome della classe che implementa la factory per il servizio ed altre piccole e banali informazioni. Nel secondo c’è tutta la descrizione del servizio WCF: protocolli, endpoint, behaviors, etc.

A questo punto, avete due strade.

  1. Se volete deployare il servizio WCF con i sorgenti, create una directory App_Code dentro la directory wcf. In questa directory mettete tutti i sorgenti C# che una volta compilati generano il servizio. Se avete fatto una classe factory custom (necessaria per l’hosting su WH4L), dovete ovviamente mettere anche i sorgenti di questa.
  2. Se volete deployare il servizio WCF con l’assembly, ovvero con un file dll, create una directory bin dentro la directory wcf e qui dentro ci copiate tutti gli assemblies che volete.

Indipendentemente dalla modalità che avete seguito, alla fin fine potete raggiungere il servizio con un url di questo tipo:

http://www.miosito/wcf/Service.svc

Se volete raggiungere il WSDL che descrive il servizio, è sufficiente aggiungere ?wsdl all’url qui sopra e siete a posto. Penso che deployare assembly sia un po’ più efficiente, perchè usare i sorgenti richiede che questi vengano preventivamente compilati, mentre con il metodo (2) questo non è necessario. Ed inoltre ci sono tutta una serie di vantaggi, come proteggere il nostro codice e così via.

Technorati Tags:    

Send to Kindle
.NET World

Bloccare il touchscreen di un Pocket PC

Il mio Dell Axim X51 ha una caratteristica interessante: sul lato sinistro ha uno switch che permette di bloccare a tutti gli effetti il touchscreen del palmare. Lo si sposta si locked e lo schermo viene disattivato: è comodo per evitare di premere accidentalmente qualche tasto sullo schermo, per esempio quando si sta ascoltando un mp3 o roba del genere. Basta riportare lo switch su unlocked affinchè lo schermo ritorni a funzionare normalmente.

Quello switch – secondo me – non è hardware, ma non fa altro che fare un qualcosa via software.
La mia domanda di questa sera è: è possibile ottenere lo stesso risultato via codice managed?

Alcuni mi dicevano di no, ma io non mi sono voluto arrendere. Googlando ho trovato software (freeware e non) che fanno proprio questo, cioè possono lockare lo schermo, probabilmente con qualche chiamata ad un livello più basso del sistema. Se lo fanno loro, devo riuscire a farlo anche io, perchè la mia (ehm…nostra) applicazione ne ha bisogno.

Qualche link utile, sia a me che a voi.

psShutXP, http://www.ppc4all.com/appdetail.php?id=3169

screenGuard 1.00, http://en.handybyte.com/cat/health/utilities/screenguard/

iLaunch 1.3, http://www.handango.it/Dettaglio_Prodotto/207543/iLaunch.php

Se qualcuno, chiunque, sa darmi qualche informazione su come lockare il display di un Pocket PC 2003 via C#, me lo faccia cortesemente sapere con un bel commento, perchè sono alla disperata ricerca di una soluzione funzionante. Grazie!!!

Technorati Tags:    

Send to Kindle
.NET World

WebHosting4Life permette di hostare servizi WCF

Ebbene sì, proprio io che con ASP.Net, web-services, IIS e compagnia bella non c’entro proprio nulla, ho passato il weekend a studiare WCF e a trovare un’applicazione pratica. Non è che non avevo nulla da fare, anzi: WCF mi serve per RapportinoMaker in modi che per adesso è troppo lungo spiegarvi, ma lo farò!

La molla è stato il libro in allegato ad IoProgrammo, di cui ho già parlato qua. Venerdì ho fatto qualche viaggio in metropolitana di troppo, e ho avuto modo di leggere i primi capitoli di volata, e l’argomento mi ha appassionato. Ieri, sebbene fosse sabato, sono andato a lavorare e la sera ho spazzolato il libro fino in fondo. Mi è piaciuto, non avrò ovviamente una conoscenza completa di WCF e ci mancherebbe altro, ma ho conosciuto quanto basta per fare qualche esperimento utile per me e per i miei prossimi lavori.

Ho creato un servizio WCF sul mio server Web locale senza alcun problema. Ne parlerò in seguito, più che altro perchè vi ho già parlato in passato del mio RapportinoMaker e potrebbe essere interessante parlarvi di qualche dettaglio in più che ho intenzione di sviluppare e che riguarda proprio WCF.

Al di là degli sviluppi che possiamo fare sul nostro server Web locale, è poi importante avere un hosting che permette di deployare un servizio WCF e di poterlo sfruttare in produzione, sia che si tratti di piccole nostre applicazioni, oppure che si tratti di applicazioni per i nostri clienti. Non so francamente se è sempre stato così, ma oggi mi sono documentato, e posso confermarvi che con l’Advance Plan WebHosting4Life permette di hostare in IIS servizi WCF, come dice questa pagina. Sui server è installato il .NET Framework 3.0 ed il pannello di controllo è a vostra completa disposizione per configurare il tutto.

Faccio un breve riassunto di come sono riuscito oggi a deployare il mio servizio WCF sul mio dominio WH4L:

  1. ho creato una normale cartella wcf dentro il mio sito Web
  2. all’interno di questa cartella ho copiato service.svc e web.config. Ho creato una subdir App_Code, all’interno della quale ho copiato tutti i files sorgenti (.cs) che una volta compilati generano il servizio WCF. I files contengono le informazioni necessarie per far funzionare il servizio: non è scopo di questo post dirvi cosa devono contenere, non ho assolutamente competenza per dirvelo in modo corretto. 🙂
  3. dal pannello di controllo di WH4L sono andato su Site Admin –> .NET Application. Ho attivato una nuova applicazione .NET sul folder wcf di prima, indicando che la versione del Framework è la 2.0.50727.

Il server è ok. A questo punto, potete sviluppare il client del servizio WCF aggiungendolo nei riferimenti. E’ sufficiente cliccare con il pulsante destro su References e selezionare Add Service Reference. Quando ci viene chiesto l’url del servizio, è sufficiente indicarlo nella forma:

http://server_name/wcf/service.svc

E tutto il resto è un gioco da ragazzi. Ma ci sono molte altre cose da dire. La prima, assolutamente, che mi sento di dirvi è: non fidatevi dei messaggi di errore che vi vengono dati dal runtime di WCF. Mi spiego meglio. Per verificare che il servizio WCF è stato deployato correttamente, la prima cosa da fare è tentare di raggiungere l’url del servizio stesso via browser: nel caso di problemi di qualsiasi tipo, l’errore appare direttamente nel browser e potete capire come risolverlo. Ma…lo ripeto…non fidatevi! Spesso vi verrà detto che il servizio non ha endpoint, per esempio, il che non è sempre vero: date un’occhiata al web.config, ma se vi sembra che gli endpoint sono corretti, controllate il nome dell’interfaccia che fa da contratto, controllate che i nomi dei tipi sono giusti, controllate di aver messo anche i namespace, e così via. Altrimenti perderete tempo come l’ho perso io oggi.

Ultima nota: se hostate anche voi su WH4L, leggetevi assolutamente questo post. Se il vostro hosting ha attivato più nomi di dominio, dovete fare come dice il post. Piccolo esempio: il mio hosting ha attivato www.vivendobyte.net, foto.vivendobyte.net, enjoy.vivendobyte.net e così via: se anche voi avete più nomi di dominio, il servizio WCF vi darà il messaggio di errore “WCF: This collection already contains an address with scheme http” che guarda caso è il titolo del post che ho linkato prima. La cosa va sistemato specificando nel file service.svc una factory per il nostro servizio: onestamente, non so dirvi nulla di dettagliato in merito: fate come me, leggete il post e fate come dite, io ho risolto così senza troppi problemi.

L’unica domanda che per questa sera mi rimane è: è possibile deployare un servizio WCF senza mettere i sorgenti .cs, ma copiare solo gli assembly compilati?

Technorati Tags:    

Send to Kindle
.NET World

Volete saperne di più su WCF?

Se avete intenzione di utilizzare Windows Communication Foundation nel prossimo futuro e se non se sapete un’acca come me, vi consiglio di acquistare il nuovo numero di IoProgrammo, quello di Novembre, che ho visto in edicola stamattina: in allegato c’è un bel libro del nostro amico Fabio Cozzolino proprio su WCF. Fabio, lo ricordo, fa parte di DotNetSide, la community pugliese .NET che si dà sempre un bel daffare per divulgare le tecnologie .NET in lungo ed in largo, da WPF a WCF fino a WF.

IoProgrammo con in allegato il libro di Fabio costa 9,90 Euro, una spesa modica per avere subito fra le mani un volumetto piccolo e trasportabile per infarinarsi su WCF. Circa 150 pagine che questa mattina in metropolitana ho avuto modo di leggere velocemente, e che mi hanno soddisfatto. Ovvio…non arriverà al dettaglio di altri testi in inglese che arrivano oltreoceano, ma mi fa sempre estremo piacere vedere autori di casa nostra che si pongono all’attenzione con testi scritti direttamente nella nostra lingua.

Technorati Tags:   

Send to Kindle