C#
E’ praticamente una vita che non scrivo piu’ su questo blog per diversi motivi (non penso se ne siano accorti in molti ), ma alla fine (meglio tardi che mai) eccomi con un nuovo post, con un nuovo progetto in testa: portare avanti una guida sullo sviluppo di .NET Core & affini in ambiente Linux. Una prima versione del documento è scaricabile qui: .NET Core & ASP.NET Core in ambiente Linux : si parte dall’installazione di .NET Core in OpenSuse 13.2 fino alla pubblicazione di una semplice Web API su Azure tramite Git, ovviamente usando VS Code come IDE e...
Documentazione "Work in Progress" della prossima release di Entity Framework : http://ef.readthedocs.org/en/latest/
Riprendiamo l’esempio del post precedente per testare l’integrazione tra EF7 e lo storage di Azure. Apriamo NuGet ed installiamo il package “EntityFramework.AzureTableStorage” (sempre in beta): Modifichiamo il codice della classe ItemDB in questo modo: 1 public class ItemDB : DbContext
2 {
3 public DbSet<Item> Items { get; set; }
4
5 protected override void OnConfiguring(DbContextOptions options)
6 {
...
Un’interessante novità introdotta con la versione 6.0 release 4 di Json.NET è la possibilità di eseguire il Merge (utilizzando 4 possibili “variazioni”) di oggetti JObject e Jarray. Un rapido esempio, tramite Web Api: [HttpPost]
public void JsonStringPost([FromBody]string value)
{
JObject jCar = JObject.Parse(value);
JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }");
jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });
string jsonFormat = jCar.ToString();
Car mergedCar = jCar.ToObject<Car>();
}
Dove l’Action “JsonStringPost” accetta una stringa tipo:
"{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals':...
Supporto a “.ToString()” e “String.Concat()”, un esempio: var queryConcat = from c in db.Vehicles
where string.Concat(c.EngineSize, c.HP).Equals("1600110")
select c;
var queryToString = from c in db.Vehicles
where c.HP.ToString().Equals("110")
select c;
Abbiamo due Query LINQ che filtrano i dati in base a condizioni su stringhe, la prima “tira fuori” tutti i veicoli dove la concatenazione dei valori...
Altra feature introdotta, l’attributo “IndexAttribute” che ci permette di definire un indice su una o piu’ colonne. Ad esempio, per creare un indice (di nome “IX_FreeDailyKm”) sulla proprietà “FreeDailyKm” del nostro modello, scriviamo: [Index("IX_FreeDailyKm_Clustered", IsUnique = false, IsClustered = false)]
public int FreeDailyKm { get; set; }
Mentre per creare un indice che insiste su due proprietà, è sufficiente utilizzare lo stesso nome come da esempio:
[Index("IX_Engine", 2)]
public string EngineSize { get; set; }
[Index("IX_Engine", 1)]
public int HP { get; set; }
Utilizzando EF migrations per aggiornare il database, avremmo:
CreateIndex("DomusDotNet.Vehicles", "FreeDailyKm", name: "IX_FreeDailyKm_Clustered");
CreateIndex("DomusDotNet.Vehicles", new[] { "HP", "EngineSize" }, name: "IX_Engine");
Quindi, a livello di database:
Da qualche giorno è stata rilasciata in RTM la versione 6.1.0 di Entity Framework. Una delle novità piu’ interessanti è sicuramente la possibilità di utilizzare l’approcio Code First partendo da un database esistente (potrebbe sembrare strano, ma se pensiamo ad un nuovo sviluppo potrebbe non esserlo). I “ferri” da utilizzare sono ovviamente EF 6.0.1 e la nuova versione di EF Tools, “scaricabile” per VS 2012 e VS 2013 seguendo questo link. Per un semplice test, apriamo VS 2013 (o 2012), magari creando un semplice progetto “Console” al quale aggiungiamo tramite NuGet i riferimenti a EF 6.0.1. Poi tasto destro...
Sono stati rilasciati in RTM, ASP.NET Dynamic Data e EntityDataSource per EntityFrameowrk 6. Per provare la nuova versione di Dynamic Data è sufficiente creare un nuovo progetto di tipo “ASP.NET Dynamic Data Entities Web Application”, ed installare tramite NuGet il package Microsoft.AspNet.DynamicData.EFProvider: Eventualmente forziamo la scrittura dei Template (“A” per sovrascrivere tutto): Aggiungiamo in modalità Code First una semplice classe Book e relativo DbContext: public class Book
{
public int Id { get; set; }
public string Title { get; set; }
public string Authors...
Per automatizzare tramite script il processo di creazione di un WebJob utilizzando Windows Azure Power Shell (Windows PowerShell ISE), i principali comandi da utilizzare sono: Add-AzureAccount, che ci permette di autenticarci utilizzando Active Azure Directory Get-AzureWebsite, per avere una panoramica dei WebSites legati alla subscription con la quale siamo collegati Get-AzureWebsiteJob, il quale ritorna le informazioni sul WebJob specificato dal paramentro Name New-AzureWebsiteJob, il quale permette la creazione di un nuovo WebJob ed accetta in ingresso i seguenti parametri: ...
Torniamo ancora sull’argomento “WebJobs” descrivendo brevemente le varie modalità di Triggering: Alla creazione di un nuovo Blob Alla ricezione di un nuovo Queue Message Esplicatamente tramite l’invocazione della funzione Call Nei post precedenti (parte 1 e parte 2) abbiamo visto come attivare il Trigger del “WebJob” alla creazione di un nuovo Blob all’interno di un container specifico semplicemente utilizzando l’attributo [BlobInput]. Con le stesse modalità é possibile eseguire il Binding di una funzione invocata dall’instanza di JobHost al ricevimento di un messaggio in un specifica...
Nella prima parte abbiamo visto come creare un’applicazione console ed utilizzarla per elaborare (ridimensionare) in modalità Continuously dei Blob contenenti immagini, caricati in un particolare container del nostro storage. L’applicazione non è stata fisicamente copiata su un Web Site di Azure, ma è stata eseguita “in locale” sfruttando gli endpoint allo storage. Per caricare il nostro processo su Web Site i passi da compiere sono pochi e semplici: Accedere al portale di Windows Azure (https://manage.windowsazure.com) Se non presente, creare un nuovo Web Site: Aprire il Web...
Windows Azure mi appassiona veramente tanto e le nuove funzionalità rilasciate (seppur in alpha) aumentano ancora di piu’ la voglia e volontà di adottare questa piattaforma. E’ il caso dei WebJobs, un nuovo SDK in versione alpha che permette di eseguire programmi e script ospitati nei Web Site di Windows Azure, “semplicemente” tramite upload di un file (ad esempio “.exe” o “.cmd” ) dato che tutto il “difficile” è onere del “WebJobs SDK”. Questa nuova feature permette di eseguire dei veri e propri batch, processi che normalmente impiegherebbero molto tempo per essere eseguiti, come ad esempio la riorganizzazione di...
Rilasciato un aggiornamento per ASP.NET DynamicData e DataSourceControl per Entity Framework 6. Tutti i dettagli del caso sul blog originale.
Una funzionalità molto interessante introdotta con ASP.NET Web API 2 OData è il supporto “Batching”, ovvero la possibilità di “impacchettare” in una singola richiesta HTTP piu’ richieste Web API (action) e ricevere in un’unica risposta HTTP i risultati ottenuti dalle singole invocazioni delle Web API. Questa funzionalità è molto interessante in quanto ci permette di minimizzare il numero di richieste\risposte tra client e server, riducendo il traffico di rete (pensiamo al Cloud…). Per abilitare Server Side questa funzionalità è necessario esporre tramite registrazione, un HTTP batch endpoint utilizzando il metodo MapHttpBatchRoute esposto dall’instanza Routes della classe HttpRouteCollection:config.Routes.MapHttpBatchRoute(
...
Immaginiamo di avere un database SQL Server esistente, e vogliamo utilizzare Entity Framework Code First per mappare il modello dati. Supponendo di avere due tabelle “Items” e “Categories” in relazione come da Database Diagram seguente: Ed una “Vista” SQL Server definita come segue: CREATE VIEW [dbo].[VCategories]
AS
SELECT Id, Name
FROM Categories
WHERE (Deleted = 0)
Aggiungiamo due classi C# definite in questo modo:
public class Category
{
public int Id { get; set; }
public string Description { get; set; }
}
public class...
Se abbiamo la necessità di debuggare le nostre Web Api pubblicate su Azure, i passi da seguire sono veramente pochi e semplici: Download ed installazione di Azure SDK 2.2 Aprire la Solution contenente il progetto Web con la definizione delle Web API Connettersi a Windows Azure tramite l’apposito link in Server Explorer: Pubblicare il progetto (in Debug): ...
Una delle nuove feature introdotte nella versione 6 di Entity Framework (attualmente in RC) è il supporto al logging dell’SQL generato dal runtime di EF6. A tal fine è sufficiente passare un opportuno delegate alla proporietà Log esposta da DbContext.Database. Per gli esempi riprendiamo lo scenario del post precedente. Supponiamo di avere il seguente codice: using (CarContext db = new CarContext())
{
System.Console.WriteLine("Cars in database : {0}", db.Cars.Count());
////Add a new car.
Car car = new Car()
{
...
Una delle novità introdotte con EF6 è la possibilità di gestire molteplici modelli per singola istanza di database, che non vuol dire usare lo stesso contesto piu’ volte nello stesso database, ma poter utilizzare Entity Framework Migrations e relativa Migration History Table per gestire la migrazione di due o piu’ modelli per singolo database fisico. Specifichiamo questa feature come Multi-Tenant Migrations. Come esempio, supponiamo di avere due classi Bus e Car facenti parte dello stesso Domain di una nostra applicazione, ma interessate da due DbContext diversi, rispettivamente BusContext e CarContext, come da Class Diagram seguente: Provando ad abilitare EF...
Tra le novità di Visual Studio 2013 ed ASP.NET 4.5.1 , troviamo nuove opzioni per integrare applicazioni SPA (Single Page Application) e Web API (ma non solo) con servizi di autenticazione esterni basati su Social come Twitter, Facebook, Google e Microsoft Accounts o basati su OAuth/OPenID (tutto a vantaggio di noi sviluppatori). Vediamo con un esempio. Apriamo VS 2013 (Preview) e selezioniamo come template “ASP.NET Web Application”: Scegliamo il progetto di tipo SPA che di base utilizza HTML5, CSS3 e ASP.NET Web API (una semplice applicazione “Todo List”): A questo punto il gioco...
Una delle features che sicuramente in molti aspettavano con la nuova release di EF è la possibilità di eseguire il mapping delle entità tramite Stored Procedures. Con la versione 6 di Entity Framework (attualmente in beta 1), abbiamo finalmente questa possibilità, e l'utilizzo è veramente immediato. Supponiamo di avere un Domain Model simile a quello mostrato nella figura seguente: Dove abbiamo un insieme di oggetti ereditati, ed una navigation property che collega l'oggeto Car ad una collezione di oggetti Optional. Aggiungiamo il riferimento ad EF6 utilizzando il gestore di "NuGet Packages" selezionando tra...
L'obiettivo era di 8 App presenti su Windows Store entro la fine di maggio, ma alla fine sono arrivato "solo" a 7. Le App che si aggiungono all'elenco precedente sono: Roma Trova Hotel Impianti Sportivi Roma Scuole Comunali Infanzia Roma Sono principalmente delle "App Catalogo" con funzionalità di ricerca (è stata l'occasione per utilizzare SQLite). Per alcune delle 7, saranno presto rilasciati degli aggiornamenti che aggiungeranno nuove funzionalità. Critiche e consigli costruttivi sono sempre ben accetti.
Tutti i dettagli del caso nel post del blog di ADO.NET qui
Alla fine, sono riuscito a pubblicare le mie prime 4 applicazioni nello Store di Windows 8. L’obiettivo è raddopiare il numero entro la fine di maggio. Se avete voglia di provarle (sono tutte free) e indicarmi qualche suggerimento per le versioni future ed attuali, di seguito link e nomi : Lazio: Cultura e Turismo L'applicazione "Lazio: Cultura e Turismo", è un elenco dei Punti d'Interesse (POI) Culturali del Lazio: Musei, Statue, Monasteri, Dipinti, Abbazie, Castelli, Torri ecc....Per ogni POI è presente una descrizione in Italiano (eventualmente in Inglese), foto e geolocalizzazione. Il catalogo dati è mantenuto e...
Se domani non avete proprio nulla da fare :-) possiamo vederci a Codemotion 2013 Roma. Una sessione introduttiva all’utilizzo del Framework ASP.NET Web Api per lo sviluppo di applicazioni RESTful.
Con il rilascio dell’aggiornamento ASP.NET 2012.2 di qualche settimana fa, lo sviluppo di una “Help Page” per Web Api, utilizzando l’apposito Package di NuGet, é un’attività che impegna meno di 5 minuti (per completezza di informazione, era già presente una versione alpha del Package prima del rilascio ufficiale).
1) Dalle “references” del progetto Web da “documentare”, apriamo la finestra per la gestione dei “Packages” di NuGet:
2) Cerchiamo la voce “Web Api Help Page” e clicchiamo su “Install” (verranno installate le dipendenze necessarie):
3) Al progetto verrà aggiunta l’area “HelpPage” sotto la cartella “Areas”, con tutte le classi necessarie (css compreso):
...
Ultimamente mi trovo a lavorare su di un progetto che utilizza WCF e MSMQ. Una delle classiche operazioni quando si lavora con queste tecnologie è sicuramente recuperare il numero di messaggi presenti in una coda. Tra documentazione e ricerche su internet, alla fine si “scopre” che ci sono diversi metodi per risolvere lo stesso problema: Cursori di MSMQ Utilizzo di GetAllMessages Utilizzo di GetEnumerator2 PowerShell Performance Counter Traducendo il tutto in righe di codice, per il punto...
Nuova alpha release della versione 6 di Entity Framework, disponibile tramite NuGet. Al solito, tutti i dettagli direttamente sul post del blog di ADO.NET.
Nella prima parte dell’articolo abbiamo introdotto i WebSocket sviluppando una semplice applicazione composta da un client che invia dei messaggi di testo ad un server (WebSocket Server), il quale risponde inviando un testo ed un numero che rappresenta la lunghezza del messaggio ricevuto. Nel post precedente abbiamo descritto con maggior dettaglio il codice lato client demandando a questa seconda parte maggiori approfondimenti relativamente alla parte server il cui codice è composto dalla semplice classe WebSochetHandler.ashx, la quale implementa l’interfaccia IHttpHandler, ragion per cui è necessario scrivere del codice per il metodo ProcessRequest(HttpContext context), per l’elaborazione delle richieste Web HTTP, e...
Chi sviluppa per il Web, si scontra ogni giorno con le “limitazioni” del modello request-response di HTTP, il quale non è pensato “ad hoc” per applicazioni real time, o comunicazione bidirezionale client-server. Per questi scenari, spesso vengono utilizzate tecniche di polling, da parte del client, per verificare l’eventuale presenza di dati “freschi”, eseguendo continuamente delle richieste HTTP, comportando dei “costi”: il server deve utilizzare differenti connessioni TCP per ogni client (una per inviare informazioni ed una per rispondere alla richiesta di aggiornamenti), un continuo scambio di messaggi client-server (comportando quindi un aumento del traffico di rete). Potrebbe sembrare cosa da...
Quando utilizziamo le Web API, per leggere e scrivere oggetti nel corpo di un messaggio Http utilizziamo delle classi particolari, le media-type formatters. "Gratis" Web API fornisce media-type formatters per JSON e XML, utilizzate secondo della richiesta da parte dei client (“Accept”). Se JSON e XML non sono i "formati" di cui abbiamo bisogno possiamo sempre creare la nostra classe derivata da MediaTypeFormatter o BufferedMediaTypeFormatter, rispettivamente per scenari asincroni o sincroni, ma non sono l’argomento di questo post promemoria. Quando abbiamo a che fare con grafi di oggetti complessi, possono crearsi situazioni in cui abbiamo riferimenti circolari tra oggetti....
Seconda parte della serie dedicata ad ASP.NET Web API. Articolo completo (anche in versione PDF) e sorgenti su DomusDotNet
Prima parte della serie dedicata ad ASP.NET Web API. Codice sorgente ed articolo completo su DomusDotNet.
Seconda parte dell’articolo dedicato a Code First Migrations. Articolo completo su DomusDotNet.
Prima parte di un articolo dedicato a Code First Migrations. Articolo completo su DomusDotNet.
Ero troppo curioso di provare la nuova versione (beta) dei Tools per EF. Diciamo che la curiosità è stata parzialmente ripagata dato che con la prima versione non riuscii a fare granché essendo, almeno nella mia configurazione software, non molto stabile. Andiamo con ordine: dopo aver installato la nuova versione dei Tools, ho provato subito ad eseguire la funzione “Reverse Engineer Code First” (disponibile come voce di menu contestuale selezionando un progetto C#). Per l’esperimento ho scelto un database con diverse tabelle, relazioni e “gerarchie”. Dopo aver cliccato sulla voce precedente, VS ha iniziato a “macinare”...
Dal post di ScottGu: You can now browse, sync and build the source tree of ASP.NET MVC, Web API, and Razor on the http://aspnetwebstack.codeplex.com web-site.
Ieri 9/3/12 si è svolto l’evento WeWantWeb organizzato da DomusDotNet presso la sede Microsoft di Roma. Le sessioni sono state registrare e quanto prima pubblicheremo Slide, codice sorgente degli esempi e Video, sul sito di DomusDotNet. Grazie a tutti i partecipanti!!! Attendiamo i vostri feedback! Al prossimo evento . Da sinistra verso destra: Alessandro Mostarda e Massimo Bonanni, Giorgio Di Nardo, Nick, io , parte di coloro che hanno avuto la pazienza di ascoltarci .
Come da titolo, evento interamente dedicato al mondo del Web!!! A breve apriranno le iscrizioni. Iscrizioni aperte!!! Tutti i dettagli e l’agenda completa sulla pagina dell’evento: WeWantWeb.
Terzo ed ultimo articolo (qualcuno dirà finalmente ) della serie dedicata ai WCF Data Services. Articolo completo su DomusDotNet. Critiche, consigli e suggerimenti sono sempre ben accetti.
Annuncio fresco fresco (quasi ) da parte del WCF Data Services Team Blog : http://blogs.msdn.com/b/astoriateam/archive/2012/01/19/announcing-odata-t4-for-c-preview-1.aspx
Secondo articolo della serie dedicata ai WCF Data Services: utilizzo con Entity Framework, ed approfondimento su Service Operations. Nel codice allegato un client ASP.NET MVC di test. Articolo completo sul sito di DomusDotNet. Al solito, consigli e suggerimenti sono sempre ben accetti .
Prima parte di una serie di articoli dedicati ai WCF Data Services, al protocollo OData e REST. Per gli interessati , articolo completo qui.
Finalmente sono riuscito a trovare qualche minuto per buttare giù qualche riga a riguardo di EF Code First Migrations (da qualche giorno disponibile in beta 1). Per chi usa l’approccio Code First l’aggiornamento del modello e della base di dati sottostante (soprattutto quando contiene dati) è un grosso problema. Proviamo a testare il funzionamento del “pacchetto” su un modello molto semplice come il seguente, in un progetto console C#: public class OfficeContext : DbContext
{
public OfficeContext()
...
Rilasciata la versione Beta 1 di Code First Migrations. Tutti i dettagli qui. La semplicità di utilizzo è veramente notevole .
Se lavoriamo con EF utilizzando l’approccio Code First, in alcuni scenari, il mapping (ad esempio nel caso di classi di dominio già esistenti) potrebbe essere un task non banale. Riprendiamo un esempio di qualche tempo fa , aggiungendo all’Object Model l’entità Articolo, come riassunto dal Class Diagram seguente: Fattura espone una collezione di oggetti RigoFattura accessibile (dall’esterno) tramite l’IEnumerable<RigoFattura> pertanto, l’unico modo di aggiungere nuove righe alla fattura è l’utilizzo del metodo AddRigoFattura. Ancora, la classe RigoFattura contiene una proprietà CodiceArticolo che ritorna la proprietà Codice dell’istanza della classe Articolo referenziata, ma anche in questo caso, l’unico...
Maggiori info ed un dettagliato Walkthrough qui.
…la 70-516 : Accessing Data with Microsoft .NET Framework 4 è andata. Adesso un paio di settimane di riposo e poi si ricomincia
SDK per utilizzare le mappe di Bing all’interno delle nostre applicazioni WPF. Una volta installato, è sufficiente trascinare il controllo “Map” all’interno del Designer di WPF e scrivere praticamente nulla, piccolo esempio: <my:Map HorizontalAlignment="Center" Margin="0" Name="map1" VerticalAlignment="Center" Height="270" Width="500" CredentialsProvider="BING_KEY" Mode="AerialWithLabels" Center="41.90,12.60" ZoomLevel="10" />
Ovviamente per l’utilizzo è necessario essere in possesso di una Bing Map Key. Download del controllo qui.
Post promemoria. Se abbiamo la necessità di eseguire l’hosting di un servizio WCF su Windows Vista, Windows Server 2008R2 o Windows 7 tramite ad esempio un’applicazione console (Windows Form o WPF ) è necessario eseguire una “prenotazione” dello spazio dei nomi URL per lo specifico account DOMAIN\User. Per eseguire questo scopo in modo programmatico (e non avere la necessità di creare un file d’installazione) allora possiamo scrivere del codice tipo: string batContent = string.Format(@"netsh http add urlacl url=http://+:{0}/ user={1}\{2}", uriToRegister.Port, Environment.MachineName, Environment.UserName);string batPath = "NetBat.bat";System.IO.File.WriteAllText(batPath, batContent);ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.UseShellExecute = true;startInfo.Verb =...
Ultimamente mi sono trovato a sviluppare un’applicazione con la necessità di sincronizzare i dati locali con un’istanza di SQL Server 2008. Generalmente parlando, le applicazioni OCA (occasionally connected application) permettono di utilizzare un’applicazione client che fa uso di dati memorizzati in una base di dati locale che periodicamente è sincronizzata con un database centrale disposto su un server. Il processo di sincronizzazione non è mai stato un task banale (almeno nel caso bidirezionale), è penso che ognuno di noi, almeno una volta nella vita da sviluppatore si sia imbattuto in questo tipo di operazione. Fino a qualche tempo...
Rilasciata la versione CTP di “Code First Migrations” (per il momento solo per SQL Server), installabile via NuGet, che aggiunge alcuni comandi per la gestione delle modifiche di database creati utilizzando l’approccio Code First. Tutti i dettagli qui: http://blogs.msdn.com/b/adonet/archive/2011/07/27/code-first-migrations-august-2011-ctp-released.aspx. Attenzione alle compatibilità!!!
Devo ammetterlo, non ho resistito alla tentazione e ho subito installato sulla VM la versione CTP June 2011 di Entity Framework. La prima feature che ho provato è il supporto agli enumerativi in modalità Code First. Partiamo subito con l’esempio. Banale classe Product e relativo DbContext: public class Product{ public string Code { get; set; } public string Description { get; set; } public DiscountType Discount { get; set; }}public class Db : DbContext{ public DbSet<Product>...
Pubblicata la seconda parte dell’articolo dedicata a Microsoft Unity. Critiche e suggerimenti sono sempre ben accetti . Su DomusDotNet è possibile scaricare il codice di esempio a corredo degli articoli.
A maggio 2011 è stata rilasciata la versione 2.1 di Unity, il Dependency Injection Container di casa Microsoft per applicazioni Desktop e Silverlight, scaricabile via NuGet o Installer. Su DomusDotNet un articolo di una serie di due su IoC, DI e naturalmente Unity. Al solito, critiche e suggerimenti sono sempre ben accetti .
Chi usa i WCF Data Service (vedi ADO.NET Data Service), potrebbe incontrare qualche difficoltà nell’utilizzo di Entity Framework 4.1 utilizzando l’approccio Code First, “a causa” del DbContext, dato che un DataService<T> si aspetta un T derivato da ObjectContext . “Under the hood” il DbContext utilizza ObjectContext e di conseguenza è facile immaginare una possibile soluzione al problema: eseguire l’ovveride del metodo CreateDataSource del DataService<T> ed utilizzare l’ObjectContext corrente. E’ sufficiente qualche ricerca tramite Bing o Google per trovare del codice di esempio. Per chi ha voglia di sperimentare, può a scaricare la versione WCF Data Service CTP 2 di Marzo...
Continuiamo il nostro percorso di studio della CTP 5 di EF, tenendo sempre presente quanto detto nel post precedente o meglio nei commenti. Vediamo come possiamo utilizzare Data Annotations e Fluent API per eseguire l’override delle convenzioni di default usate in code first per mappare la base di dati sottostante: impostare il nome delle tabelle e/o colonne, lunghezza dei campi, definizione delle chiavi, definizione delle relazioni ecc. La volta precedente, utilizzando Code First generavamo il database rappresentato dal diagramma seguente: Partiamo dal database e apportiamo qualche modifica alle tabelle in questo modo: rinominiamo Projects in Progetto, Skills...
Nuovo articolo della serie pubblicato su DomusDotNet, comprensivo di sorgenti in C# e VB.NET. Al solito, critiche e suggerimenti sono sempre ben accetti.
Nel caso in cui una nostra applicazione abbia necessità di lavorare con i file, con la nuova versione del .Net Framework sono stati introdotti nuovi metodi statici per la classe System.IO.File. Il primo è System.IO.File.ReadLines (2 overloads), che accetta in ingresso il percorso del file da leggere (ed eventualmente un Encoding da utilizzare) e restituisce un IEnumerable<String>: uno dei vantaggi rispetto all’uso del metodo System.IO.File.ReadAllLines e che il file non deve necessariamente essere letto tutto prima di eseguire il processing delle singole linee. In caso di file molto grandi il metodo ReadAllLines può essere quindi inefficiente. L’IEnumerable<String> creato può essere...
Pubblicato sul portale di DomusDotNet l'ultima parte degli articoli introduttiva alla tecnologia WCF 4. L'argomento trattato è l'hosting dei servizi. Articolo e sorgenti (in C# e VB.NET) sono disponibili qui . Al solito, critiche e suggerimenti sono sempre ben accetti.
Pubblicato sul portale di DomusDotNet la terza parte della serie introduttiva su WCF 4. L'argomento trattato è la gestione degli errori. Articolo e sorgenti (in C# e VB.NET) sono disponibili qui . Critiche e suggerimenti sono sempre ben accetti.
Pubblicato sul portale di DomusDotNet la seconda parte della mini serie introduttiva su WCF 4. Articolo e sorgenti (in C# e VB.NET) sono disponibili qui. Al solito, critiche e suggerimenti sono sempre ben accetti.
E' uscito il primo di una mini-serie di articoli riguardanti la nuova versione di WCF. Per chi fosse interessato potete trovare l'articolo su DomuDotNet: Introduzione a WCF 4 . Lo scopo della serie è partire dalle basi e affrontare successivamente tematiche più avanzate. Al solito, critiche e suggerimenti sono sempre ben accetti. La prossima settimana la seconda puntata.
Dopo tanti sacrifici, ogni tanto arriva qualche soddisfazione: ieri è mi giunta una copia del libro “Approaches in Material Sampling”, in cui, oltre ad essere uno dei coautori di un capitolo (Grazie Gianni), è presente un CD allegato con alcuni software che permettono di eseguire analisi statistiche sui dati di campionamento. Uno di questi è SISSI 2.0: “a resampling-based software for sample size determination”. Il tool è stato scritto in .NET 3.5 facendo largo uso di LINQ To Objects e programmazione multi-threading. Spero quanto prima di riuscire ad eseguire il porting verso .NET 4.0 per sfruttare MEF ed aggiungere un...
L’Adapter Pattern appartiene alla categoria “Structural Pattern”, secondo l’identificazione proposta dalla GoF. In questa categoria ricadono i patterns che usano i meccanismi di un linguaggio per facilitare la progettazione, individuando un modo semplice per stabilire la relazione tra gli oggetti. Per descrivere il contesto in cui può essere applicato il pattern in oggetto, supponiamo di avere il seguente scenario: dobbiamo sviluppare un software utilizzando librerie di terze parti di cui non abbiamo il codice sorgente. Vogliamo far “collaborare” due classi A e B appartenenti alle due librerie, ma aventi interfacce incompatibili. Per far funzionare il tutto abbiamo bisogno di...
Con un amico stiamo analizzando/realizzando un software statistico che fa largo uso del fattoriale e del coefficiente binomiale. Dovendo calcolare il fattoriale di valori come 500, non possiamo utilizzare i “normali” tipi di dato offerti dal .Net Framework 3.5, dato che, con un float calcoliamo al più 34!, con un UInt64 65! e con un double 170!. Ben lontani dal nostro obiettivo... Si potrebbe allora utilizzare qualche formula di approssimazione, come la formula di Stirling (utilizzabile operativamente in questo modo). Così facendo potremmo ottenere un risultato esprimibile secondo la notazione scientifica: 1,21993348682175 *10^1134, ma non potremmo operare...
Supponiamo di avere un file di Report in formato .rdlc, e di voler stampare una lista di prodotti visualizzando un'immagine prodotta a run-time e memorizzata in un MemoryStream, piuttosto che utilizzare file d'immagine. Ad esempio, supponiamo di avere nel nostro Database, una tabella denominata Prodotti, contenente 4 colonne: Aggiungiamo al nostro progetto (ad esempio di tipo Web Application) un DataSet tipizzato (dsProdotti) contenente un DataTable Prodotti, a cui andiamo ad aggiungere una colonna denominata Immagine, con proprietà DataType impostata su System.Byte[]: Aggiungiamo un nuovo file di Report (Report1.rdlc), nel designer del report,...
Post nato da discussione su forum. Supponiamo di voler creare un client ftp (applicazione Windows Form) per il download/upload di file, utilizzando un controllo ProgressBar per visualizzare lo stato di avanzamento dell'operazione. Grazie alle classi messe a disposizione del Framework .Net, il codice per il download di un file remoto, potrebbe essere del tipo: 1 //Connessione con l'host
2 Connect(remotePathFile);
3
4 //Imposta il tipo di richiesta
5 _conn.Method = WebRequestMethods.Ftp.DownloadFile;
6
7 //Ottiene la risposta
8 _resp = (FtpWebResponse)(_conn.GetResponse());
9 System.IO.Stream _respStream = _resp.GetResponseStream();
10
11 if (ContinueProcess(_resp.StatusDescription))
12 {
13 ...
Supponiamo di avere un file XML molto semplice, del tipo: 1 <?xml version="1.0" encoding="utf-8" ?>
2 <books>
3 <book id="1">
4 <title>Introducing To Microsoft LINQ</title>
5 <isbn>43554354523</isbn>
6 </book>
7 <book id="2">
8 <title>Pro WPF Windows Presentation Foundation in dot NET 3.0</title>
9 <isbn>232132142</isbn>
10 </book>
11 <book id="3">
12 <title>Foundations of F#</title>
13 <isbn>772337271</isbn>
14 </book>
15 <book id="4">
16 ...
Supponiamo di avere una situazione schematizzata dal seguente Class Diagram: Supponiamo di avere un unico metodo Add che aggiunge oggetti di tipo Person ad una lista tipizzata denominata People, come nel caso seguente: 1
2 List<Person> _people = new List<Person>();
3
4 private void Add(Person p)
5 {
6 _people.Add(p);
7 }
Utilizziamo il seguente codice per popolare la collezione People :
1 Employee e = null;
2 e = new Employee();
3 e.Age = 21;
4 e.Name = "Peter";
5 e.Surname = "Book";
6 e.Office = "Piazzale Kennedy 21";
7
8 Add(e);
...
Piccolo post derivato da una risposta su un forum. Un semplice modo per dotare una nostra applicazione di un log degli eventi, è utilizzare la classe EventLog che il .Net Framework mette a disposizione. MSDN suggerisce, nel caso in cui si debba usare il log per poche operazioni di utilizzare i metodi statici della classe EventLog, altrimenti conviene registrare un log degli eventi personalizzato e utilizzare un'istanza della classe EventLog. Quando detto si traduce in poche righe di codice: 1 if (!EventLog.SourceExists("MyEventLog", "."))
2 EventLog.CreateEventSource("MyEventLog", "CustomApplication");
3
4 _demoLog = new EventLog("CustomApplication", ".", "MyEventLog");
Per aggiungere...
Spesso si leggono nei forum post di richiesta su come poter inviare e-mail (con e senza allegati) utilizzando le classi che il Framework .Net mette a disposizione. Spero che questo piccolo post con relativo codice d'esempio possa tornare utile. Per inviare una semplice mail di testo senza allegati è sufficiente scrivere: 1 //Mail Plain Text - Senza allegato
2 MailMessage mailMessagePlainText = new MailMessage();
3 mailMessagePlainText.From = new MailAddress("indirizzo.mittente@dominio.it", "Mittente");
4 mailMessagePlainText.To.Add (new MailAddress ("destinatario@dominio.it","Destinatario"));
5 mailMessagePlainText.Subject ="Plain Text e-mail";
6 //mailMessage.CC utilizzare se è necessario inviare in copia carbone
7 mailMessagePlainText.Body ="Questa è una bellissima e-mail, soprattutto utile!";
Se...
Una classe Helper per l'algoritmo di cifratura simmetrico System.Security.Cryptography.Rijndael , magari può tornare utile: 1 public class RijndaelHelper
2 {
3 private byte[] _IV = null;
4 private byte[] _key = null;
5 private Rijndael _rijndael = null;
6 private string _lastExceptionDescription = "";
7
8 public string LastExceptionDescription
9 {
10 ...
Supponiamo di avere un'applicazione web (classica gestione dei preventivi web, ad esempio), che al termine di una serie di operazioni produce un file pdf (il preventivo). Se volessimo rendere scaricabile/apribile il file senza che l'utente debba nuovamente fare click su di un collegamento, al termine delle operazioni potremmo eseguire il redirect verso una pagina contenente del tipo: 1 protected void Page_SaveStateComplete(object sender, EventArgs e)
2 {
3 try
4 {
5 RenderDocument(this.Context);
6 }
7 ...
Post nato da discussione su Forum. Per "eliminare" l'effetto del cambio del colore di sfondo (Dal Grigio all'azzurro in modalità standard) di un controllo Button su di una Window Form, è sufficiente impostare a False la proprietà UseVisualStyleBackColor del controllo Button. In questo modo disabilitiamo l'utilizzo dei visual-style per lo specifico controllo (dove supportato)
Technorati Tag: UseVisualStyleBackColor
Dopo aver ricevuto suggerimenti in merito al codice del post originale, ho preferito modificare il post precedente senza crearne uno nuovo. Le modifiche sono visibili all'indirizzo http://blogs.ugidotnet.org/PietroLibroBlog/archive/2008/04/10/92164.aspx.
Dopo aver ricevuto ulteriori suggerimenti (come da commenti) ed aver letto in rete articoli inerenti l'argomento, ho nuovamente modificato la classe MD5Helper, in questo modo:
1 public class MD5Helper 2 { 3 System.Security.Cryptography.MD5 _md5 = null; 4 5 public MD5Helper() 6 { 7 _md5 = System.Security.Cryptography.MD5.Create(); 8...
Causa la necessità di memorizzare dati non in chiaro e di utilizzare l'algoritmo MD5, mi sono creato una piccola classe helper, che a sua volta utilizza la classe System.Security.Cryptography.MD5. Il codice della classe è il seguente:
1 private string _dummyString = "!@HASH#!"; 2 System.Security.Cryptography.MD5 _md5 = null; 3 public MD5Helper (){ 4 5 _md5 = System.Security.Cryptography.MD5.Create(); ...
Post nato da una discussione su forum. Grazie alla classe Marshal , è possibile, ad esempio, convertire una struct in un array di byte e viceversa. Supponiamo di avere la seguente struct, denominata con tanta fantasia, CustomStruct:
1 private struct CustomStruct 2 { 3 public byte _b1; 4 ...
Post nato da una discussione su forum. Per recuperare i nomi degi fogli di lavoro di un file excel, al fine di popolare ( ad esempio) un controllo ComboBox, possiamo sfruttare la funzione GetOleDbSchemaTable della classe OleDbConnection, la quale, restituisce un istanza di oggetto DataTable con le informazioni a noi necessarie. Il codice per popolare il ComboBox è il seguente:
1 DataTable dt = GetWorksheetList(@"C:\Test.xls");2 if (dt != null)3 ...
L'uso dell'isolated storage permette alle nostre applicazioni di memorizzare dati su file, senza preoccuparsi di avere privilegi sufficienti per creare/modificare/cancellare file su disco. La classe necessaria all'utilizzo dell'isolated storage è IsolatedStorageFile che fornisce le funzionalità di base per la creazione di file e di cartelle nell'isolated storage. Questa si compone dei seguenti metodi statici , secondo del livello di isolamento che vogliamo ottenere:
GetMachineStoreForApplication
...
Come ottenere la lista delle directory e dei file remoti
utilizzando gli oggetti FtpWebRequest e FtpWebResponse
System.Net.FtpWebRequest conn =null ;System.Net.FtpWebResponse resp = null;conn = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://localhost"));conn.Credentials = new NetworkCredential("username", "password");conn.KeepAlive = false;conn.Method = WebRequestMethods.Ftp.ListDirectoryDetails; //Ottiene la risposta resp = (FtpWebResponse)(conn.GetResponse());StreamReader strReader = new StreamReader(resp.GetResponseStream(), System.Text.ASCIIEncoding.ASCII);//ArrItems contiene la lista di files e directorystring strItems = strReader.ReadToEnd();string[] arrItems = strItems.Split("\n".ToCharArray());strReader.Close();
Girovagando tra i vari siti di programmazione ed affini ho trovato questi due link:
1) Convertire un file PDF in semplice testo (in tre righe!) in .Net
Converting PDF to Text in C#
2) Utilizzare librerie java in .Net con IKVM.NET
Uses for IKVM.NET
Piccolo esempio (nato da una discussione su di un forum) di come utilizzare una risorsa incorporata (file XML) per popolare un oggetto AutoCompleteStringCollection per usufruire della funzione di completamento automatico di un controllo TextBox.
AutoCompleteSourceEmbedded.zip