The Dark Side of .NET

Il lato oscuro della forza!

July 2010 - Post

Buone ferie a tutti

Finalmente il coutndown sta per finire: domenica 1 agosto partenza per l’Inghilterra, destinazione Reading! Ci sono già stato l’anno scorso e ci torno con grande piacere quest’anno in compagnia della mia sorellina che insieme a me seguirà un corso di inglese sul posto! Ma non sarà solo studio naturalmente, so già che ci divertiremo un sacco! E poi devo rimediare a una grossa mancanza dell’anno scorso: a Reading c’è una sede Microsoft… ma io non lo sapevo!!!!! Andrò sicuramente a darci un occhio!

The Microsoft headquarters at Thames Valley Park

Waterstone quest’anno non avrà lo stesso fascino dell’anno scorso a causa del nuovo ebook reader (Onyx Boox 60) che ho comprato, ma sicuramente non mancherò di ritornarci! Chiunque di voi si trovasse in zona me lo faccia sapere che ci incontriamo sicuramente! Tornerò il 30 Agosto carico per un nuovo anno lavorativo pieno zeppo di attività, eventi, viaggi e anche qualche sorpresa!!!

Buone ferie a tutti voi, ci rivediamo a settembre!!!!!

-- Michele

Certificazioni: l’esame 70-562 - ASP.NET 3.5

Ritornando a parlare di certificazioni, una volta sostenuto l’esame propedeutico, il 70-536, che ci qualifica come MCP, è possibile cominciare a sostenere gli esami specifici delle varie tecnologie. Per Asp.NET 3.5 l’esame corrispondente è il 70-562. La scheda ufficiale dell’esame la trovate a questo link:

http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-562&locale=en-us

Il testo ufficiale per prepararsi a questo esame è il MCTS Self-Placed Training Kit (Exam 70-562): Microsoft .NET Framework 3.5 - ASP.NET:

MCTS Self-Paced Training Kit (Exam 70-562): Microsoft .NET Framework 3.5-ASP.NET Application Development: Microsoft(r) .Net Framework 3.5 ASP.Net Application Development (Pro - Certification)

Anche per questo esame avete 4 ore, le domande a cui rispondere sono 45 e la procedura è la stessa del primo esame. Il libro è scritto molto bene (naturalmente la versione in inglese)ed è molto chiaro su alcuni aspetti un po’ complessi di asp.net come la Microsoft Ajax Library e la creazione di custom control. Vale sempre la stessa regola degli esami universitari: non studiate per l’esame in se ma per la vostra cultura personale, il superamento dell’esame è una ovvia conseguenza.

Consiglio fortemente di fare gli esercizi e i lab suggeriti dal testo: per chi non usa questa tecnologia tutti i giorni è un buon modo per fare pratica ed acquisire quella familiarità necessaria a realizzare applicazioni web di successo e a superare a pieni voti (il minimo è sempre 700 su 1000) l’esame!

Web Application vs Web Site

Aiutando un amico di dotnetcampania a risolvere un problema con l’interrogazione di un web service mi è venuta l’idea di fare un post che spieghi le differenze tra Web Application e Web Site che, nonostante sia un tema trattato e ritrattato, è meglio sviscerare ancora una volta.

Cercando in rete fortunatamente si viene facilmente rediretti alla pagina di msdn che spiega nel dettaglio le differenze:

http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx

Aggiungo alla lista proprio la soluzione al problema dell’amico: se aggiungete una web reference a un servizio web nel caso della web application vedrete nella cartella anche il proxy generato e quindi potete eventualmente modificarlo, nel caso del web site questo non succede:

image

Inversamente nel secondo caso avete supporto pieno per la cartella App_Code (che non uso mai…) e le altre varie cartelle speciali:

 image

Mentre nel primo nonostante il tutto funzioni creando una cartella chiamata App_Code e inserendoci codice all’interno non avrete supporto da parte dell’ambiente di sviluppo:

 image

-- Michele

Disponibile la prima preview di Asp.Net MVC 3!

E stata da poco resa disonibile la prima preview di asp.net mvc 3 che potete scaricare qui:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=cb42f741-8fb1-4f43-a5fa-812096f8d1e8#Overview

Le novità di questa versione sono:

  • Razor Syntax View Engine.
  • Dynamic View and ViewModel properties.
  • "Add View" Dialog Box Supports Multiple View Engines.
  • Service Location and Dependency Injection Support.
  • Global Filters.
  • New JsonValueProviderFactory Class.
  • Support for .NET Framework 4 Validation Attributes and IValidatableObject.
  • New IClientValidatable Interface.
  • Support for .NET Framework 4 Metadata Attributes.
  • New IMetadataAware Interface.
  • New Action Result Types.
  • Permanent Redirect

Buon download!

-- Michele

Cross-Page PostBack e PreviousPage Tipizzata

Tutti i programmatori asp.net sanno che il framework che usano è basato principalmente su due concetti, Postback e Viewstate, che forniscono un modello di sviluppo “simile” in apparenza allo sviluppo windows form ma completamente diverso dal punto di vista architetturale. E’ possibile in alcuni scenari fare in modo che il postback scatenato da un controllo in una pagina sia rediretto verso una pagina diversa: si parla in questo caso di cross-page postback e si può ottenere facilmente impostando la proprietà PostBackUrl del controllo che deve scatenare l’azione alla pagina di destinazione:

   1: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication6.WebForm1" %>
   2:  
   3: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   4: <html xmlns="http://www.w3.org/1999/xhtml">
   5: <head runat="server">
   6:     <title></title>
   7: </head>
   8: <body>
   9:     <form id="form1" runat="server">
  10:     <div>
  11:         <asp:textbox ID="MyTextBox" runat="server" />
  12:         <asp:button ID="MyButton" text="Invia" runat="server" PostBackUrl="~/WebForm2.aspx" />
  13:     </div>
  14:     </form>
  15: </body>
  16: </html>

La pagina di destinazione può, attraverso la proprietà PreviousPage, accedere ai controlli della pagina chiamante:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class WebForm2 : System.Web.UI.Page
   7:     {
   8:         protected void Page_Load(object sender, EventArgs e)
   9:         {
  10:             if (PreviousPage != null)
  11:             {
  12:                 TextBox myTextBox = PreviousPage.FindControl("MyTextBox") as TextBox;
  13:                 if(myTextBox != null)
  14:                     this.MyLabel.Text = myTextBox.Text;
  15:             }
  16:         }
  17:     }
  18: }

Ottenendo un risultato in alcuni scenari (sicuramente non il nostro esempio…) molto comodo:

image

image

Volendo è possibile anche in questo caso fare a meno del FindControl e tipizzare la property PreviousPage come abbiamo fatto per la Master:

image

Ci basta quindi, nel nostro esempio aggiungere la direttiva PreviousPageType indicando WebForm1:

   1: <%@ PreviousPageType TypeName="WebApplication6.WebForm1" %>

Ed esporre pubblicamente il controllo che ci interessa con una property (sempre per la questione che sono protected):

   1: using System.Web.UI.WebControls;
   2:  
   3: namespace WebApplication6
   4: {
   5:     public partial class WebForm1 : System.Web.UI.Page
   6:     {
   7:         public TextBox WebForm1TextBox { get { return this.MyTextBox; } }
   8:     }
   9: }

A quel punto possiamo scrivere:

   1: using System;
   2:  
   3: namespace WebApplication6
   4: {
   5:     public partial class WebForm2 : System.Web.UI.Page
   6:     {
   7:         protected void Page_Load(object sender, EventArgs e)
   8:         {
   9:             if (PreviousPage != null)
  10:             {
  11:                 this.MyLabel.Text = PreviousPage.WebForm1TextBox.Text;
  12:             }
  13:         }
  14:     }
  15: }

Ed ottenere lo stesso risultato.

-- Michele

Tipizzare la MasterPage

Quanti di voi hanno avuto la necessità di accedere dal code-behind di una pagina aspx ad un controllo presente nella masterpage legata alla pagina? Immagino molti. La soluzione più intuitiva è sicuramente il FindControl sulla proprietà Master, che non tradisce mai:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class _Default : System.Web.UI.Page
   7:     {
   8:         protected void Page_Load(object sender, EventArgs e)
   9:         {
  10:             Menu masterMenu = this.Master.FindControl("NavigationMenu") as Menu;
  11:         }
  12:     }
  13: }

Esiste però una tecnica che vi permette di accedere in maniera semplice al contenuto della master page: il MasterType.

image

Impostando questa direttiva potete istruire la vostra pagina sull’identità (il tipo) della masterpage collegata, tipizzandone la visibilità ed evitando così eventuali cast. Comunque se volete accedere ai controlli della Master (che hanno visibilità protected) dovrete comunque esporli con una property. Prendendo ad esempio il menu della master page del template web di asp.net 4 ci basta esporlo con una property pubblica:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class SiteMaster : System.Web.UI.MasterPage
   7:     {
   8:         public Menu MainMenu { get { return this.NavigationMenu; } }
   9:  
  10:         protected void Page_Load(object sender, EventArgs e)
  11:         {
  12:         }
  13:     }
  14: }

A quel punto aggiungere una voce al menu dalle vostre pagine diventa banalmente:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class _Default : System.Web.UI.Page
   7:     {
   8:         protected void Page_Load(object sender, EventArgs e)
   9:         {
  10:             this.Master.MainMenu.Items.Add(new MenuItem("Nuova Voce Menu"));
  11:         }
  12:     }
  13: }

Con l’ovvio risultato:

image

-- Michele

Templated User Control

I programmatori Asp.Net Web Form conoscono bene il concetto di User Control grazie al quale è possibile creare dei propri controlli raggruppando quelli già esistenti, non tutti invece conoscono la possibilità di creare dei Templated User Control in cui non siamo noi a creare l’interfaccia che avrà il controllo ma è l’utente del nostro controllo che, attraverso la definizione di un template, può definire il rendering del controllo, un po’ come fa il controllo asp:repeater.

Nonostante possa spaventare a primo impatto, la realizzazione di questi controlli è più semplice di quello che si crede una volta capito il meccanismo. Si parte dai dati che si vogliono rappresentare, supponiamo una news:

   1: using System;
   2:  
   3: namespace WebApplication1
   4: {
   5:     public class News
   6:     {
   7:         public string Titolo { get; set; }
   8:         public DateTime Data { get; set; }
   9:         public string Testo { get; set; }
  10:         public string Link { get; set; }
  11:     }
  12: }

Creiamo uno user control come siamo abituati a fare, aggiungendolo come nuovo item, e nel markup l’unica cosa che dobbiamo fare è creare un PlaceHolder:

   1: <%@ Control Language="C#" AutoEventWireup="true" 
   2:     CodeBehind="NewsTemplateContoller.ascx.cs" 
   3:     Inherits="WebApplication1.UC.NewsTemplateContoller" %>
   4:  
   5: <asp:PlaceHolder id="PlaceHolderNewsTemplate" runat="server">
   6: </asp:PlaceHolder>

Definiamo nel code behind del controllo due property, una del nostro tipo News e l’altra di tipo ITemplate che chiameremo LayoutTemplate:

   1: using System;
   2: using System.Web.UI;
   3:  
   4: namespace WebApplication1.UC
   5: {
   6:     public partial class NewsTemplateContoller : System.Web.UI.UserControl
   7:     {
   8:         [PersistenceMode(PersistenceMode.InnerProperty)]
   9:         [TemplateContainer(typeof(NewsUcContainer))]
  10:         public ITemplate LayoutTemplate { get; set; }
  11:  
  12:         public News News { get; set; }
  13:    }
  14: }

La property ITemplate deve essere decorata con due attributi:

  • PersistenceMode, che specifica come un controlo asp.net persiste le proprietà a design time, nel nostro caso InnerDefaultProperty specifica che le proprietà saranno persistite all'interno del tag di apertura e chiusura del controllo
  • TemplateContainer, che serve a indicare che è un contenitore, nel nostro caso, di contenuti di tipo NewsUcContainer

A questo punto dobbiamo creare il nostro container, che chiameremo NewsContainer e che, oltre ad essere un Control, implementerà l’interfaccia INamingContainer che è vuota e serve solo a marcare la classe come contenitore:

   1: public class NewsUcContainer : Control, INamingContainer
   2: {
   3:     public News News { get; set; }
   4:  
   5:     public NewsUcContainer(News news)
   6:     {
   7:         this.News = news;
   8:     }
   9: }

A questo punto basta implementare il Page_Init del nostro controllo per legare quanto realizzato fino a questo momento:

   1: protected void Page_Init(object sender, EventArgs e)
   2: {
   3:    PlaceHolderNewsTemplate.Controls.Clear();
   4:  
   5:    if(LayoutTemplate != null)
   6:    {
   7:        if (this.News == null) this.News = new News();
   8:        NewsUcContainer container = new NewsUcContainer(this.News);
   9:        this.LayoutTemplate.InstantiateIn(container);
  10:        PlaceHolderNewsTemplate.Controls.Add(container);
  11:    }
  12: }

In pratica svuotiamo il placeholder da eventuali contenuti e se il LayoutTemplate non è vuoto istanziamo il container e lo riversiamo nel LayoutTemplate, dopodichè non ci resta che aggiungere il container ai controlli del placeholder.

Usare il nostro controllo significa come al solito registrarlo nella pagina…

   1: <%@ Register src="UC/NewsTemplateContoller.ascx" tagname="NewsTemplateContoller" tagprefix="uc1" %>

e creare il template per la nostra news all’interno del LayoutTemplate:

   1: <uc1:NewsTemplateContoller ID="NewsTemplateContoller1" runat="server">
   2:     <LayoutTemplate>
   3:         <h3><%
   1: # Container.News.Titolo 
%></h3>
   4:         <p style="font-style:italic"><%
   1: # Container.News.Data.ToString("dd-MM-yyyy") 
%></p>
   5:         <p><%
   1: # Container.News.Testo 
%></p>
   6:         <asp:hyperlink navigateurl='<%# Container.News.Link %>' runat="server" />
   7:     </LayoutTemplate>
   8: </uc1:NewsTemplateContoller>

Bindiamo qualche dato di prova nella Page_Load:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     NewsTemplateContoller1.News.Data = DateTime.Now;
   4:     NewsTemplateContoller1.News.Link = "http://www.dotnetcampania.org";
   5:     NewsTemplateContoller1.News.Titolo ="DotNetCampania on line!";
   6:     NewsTemplateContoller1.News.Testo = "Finalmente On Line il primo User Group tutto campano sulle tecnologie .NET ! Nati nel Giugno 2009 e costituitici nel Gennaio 2010 come Associazione no-profit legalmente riconosciuta, ci poniamo come obiettivo quello di riunire tutti gli appassionati di tecnologie .NET residenti in campania; anche se naturalmente possono iscriversi tutti quelli che reputeranno utile fare community con noi.";
   7:     NewsTemplateContoller1.DataBind();
   8: }

Ed ecco il favoloso risultato:

image

Il consiglio è: provateci! Sembra più complicato di quello che effettivamente è quindi non lasciatevi intimorire!

-- Michele

Sostituire i controlli standard di Asp.Net

Anche questa è una funzionalità interessante di asp.net… E’ possibile da web.config andare a chiedere ad asp.net di utilizzare un nostro controllo custom anzichè un controllo standard di asp.net:

<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID">
  <tagMapping>
    <add tagType="System.Web.UI.WebControls.Button" 
         mappedTagType="MyControls.MyButton" />
  </tagMapping>
</pages>

Che sostituirà tutti i button di asp.net con il button personalizzato. Implementare un proprio button è un’operazione abbastanza semplice, basta creare un progetto CustomControl, nel mio caso MyControls ed estendere il controllo a cui vogliamo aggiungere qualche funzionalità. Supponiamo ad esempio di voler fare in modo che quando passiamo con il mouse sul pulsante il suo testo diventi ‘cliccami’:

   1:  using System.Web.UI.WebControls;
   2:   
   3:  namespace MyControls
   4:  {
   5:      public class MyButton : Button
   6:      {
   7:          public MyButton()
   8:          {
   9:              this.Attributes.Add("onmouseover", "this.value='cliccami'");
  10:          }
  11:      }
  12:  }

Il risultato sarà ovviamente:

image image

Il tutto senza aver minimamente  toccato la pagina:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication5.WebForm2" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:button text="text" runat="server" />    
    </div>
    </form>
</body>
</html>

Su internet trovate un po’ di applicazioni interessanti come ad esempio sostituire le textbox con delle vostre textbox in cui lo sfondo diventa colorato al focus, dando all’utente un feedback sul dove sta scrivendo.

-- Michele

Mandare una mail ad una cartella con Asp.Net

Come molti sanno mandare una mail con asp.net è un’operazione abbastanza semplice, basta aggiungere al web.config:

<system.net>
    <mailSettings>
        <smtp from="test@foo.com">
            <network host="smtpserver1" port="25" userName="username" password="secret" />
        </smtp>
    </mailSettings>
</system.net>

Mentre nel codice basta scrivere:

   1:  MailMessage message = new MailMessage();
   2:  message.From = new MailAddress("sender@foo.bar.com");
   3:   
   4:  message.To.Add(new MailAddress("recipient1@foo.bar.com"));
   5:  message.To.Add(new MailAddress("recipient2@foo.bar.com"));
   6:  message.To.Add(new MailAddress("recipient3@foo.bar.com"));
   7:   
   8:  message.CC.Add(new MailAddress("carboncopy@foo.bar.com"));
   9:  message.Subject = "This is my subject";
  10:  message.Body = "This is the content";
  11:   
  12:  SmtpClient client = new SmtpClient();
  13:  client.Send(message);

Durante lo sviluppo potrebbe essere comodo evitare l’invio vero della mail ma avere comunque un modo per verificare che il contenuto inviato coincida con quanto sperato. Per fare questo è possibile aggiungere un attributo all’elemento smtp perchè l’invio avvenga verso una cartella specificata:

image

Scegliendo come valore SpecifiedPickupDirectory e aggiungendo le informazioni sulla directory da utilizzare il sistema creerà un file .eml con il contenuto della mail:

<system.net>
  <mailSettings>
    <smtp from="test@foo.com" deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="d:\mails" />
    </smtp>
  </mailSettings>
</system.net>

Le ragioni per utilizzare questa possibilità possono essere davvero tante:

  • Testare l’invio massimo di email
  • Verificare eventuali errori portando temporaneamente l’invio delle mail in un cartella per un sito in produzione
  • Durante lo sviluppo per evitare le attese tipiche dell’invio e della ricezione delle mail
  • Decidere di far processare l’invio delle mail nella cartella da un servizio separato

Naturalmente possiamo anche impostare il tutto da codice se volessimo ad esempio condizionare sotto if quale delivery method usare: basta impostare la proprietà DeliveryMethod dell’oggetto SmtpClient:

image

Remix 2010 su BE IT

E’ disponibile anche la seconda track del remix su BE IT:

  • Sviluppare applicazioni con Silverlight e WCF RIA Services
  • Sviluppare applicazioni con Windows Azure
  • ASP.NET MVC e WebForms: quale scegliere?
  • Test e deploy automatizzato di applicazioni Web
  • Troubleshooting the Web con Fiddler2 e Internet Explorer 9
  • Buona visione!

    Nuovi video su Windows Phone su BE IT

    Sono stati pubblicati su BE IT un bel po’ di video sullo sviluppo su windows phone 7;

  • Architettura di Windows Phone 7 e opportunità del marketplace
  • Sviluppare applicazioni Windows Phone 7 con Silverlight
  • Migliorare le applicazioni con i servizi cloud di Windows Phone 7
  • Windows Phone 7: smart design & integrated experience
  • XNA e lo sviluppo di giochi su Windows Phone 7
  • Si tratta dei video delle omologhe sessioni tenutesi al Remix di quest’anno, per chi se lo fosse perso è una buona occasione per recuperare.

    Buona visione

    Applicazioni SOA con Silverlight: dal design al deploy

    Venerdì scorso all’università di Ancona si è tenuto un bellissimo workshop organizzato da DotNetMarche in collaborazione con DotDotNet e Gaia sulle applicazioni orientate ai servizi su stack microsoft, partendo dal design dell’applicazione fino all’utilizzo di tfs per il suo deploy.

    SNC00564 SNC00573
    SNC00575 SNC00576

     

     

     

     

     

    Purtroppo io e il fido Manu siamo arrivati un po’ in ritardo ma siamo riusciti comunque a goderci il piacere della compagnia e dei contenuti che come sempre sono stati di grande spessore tecnico. Il grande Alessandro Scardova, MVP su Blend, ci ha parlato di sketchflow e di come realizzare prototipi di applicazioni da sottoporre al cliente al solo fine di valutarne le funzionalità che saranno realizzate. Molto interessante la nuova funzionalità di pubblicazione su sharepoint che permette di condividere sia quanto realizzato, sia i feedback dei clienti. Mauro Servienti e Giorgio Formica (che non ha un blog…) ci hanno illustrato un framework da loro realizzato in Gaia per la realizzazione di applicazioni SOA in scenari molto avanzati spingendo WCF probabilmente a limiti sconosciuti all’utilizzatore medio di questa tecnologia. E’ poi tornato sul palco Alessandro che insieme a Marco Ferretti e Stefano Ottaviani ci ha mostrato come sia semplice con Blend rendere accattivanti le applicazioni realizzate dagli sviluppatori. Termina la giornata il mitico Gian Maria Ricci, parlandoci di deploy con TFS mediante configurazione delle build e personalizzazione delle stesse mediante workflow foundation.

    SNC00565 SNC00568 u
    SNC00569 SNC00566

     

     

     

    L’evento è stato trasmesso in streaming grazie al supporto dell’università di Ancona che ha messo a disposizione l’attrezzatura, la banda e un bravissimo tecnico che ha supportato l’evento in tutta la sua interezza. Purtroppo l’assenza dell’aria condizionata e il caldo di questi giorni hanno messo a dura prova speaker ed ospiti che nello spacco per il pranzo hanno trovato refrigerio al bar dell’università…

    SNC00570 SNC00571
    34643_10150211921745051_807805050_13609673_5606575_n 37648_10150210754630051_807805050_13577672_6599856_n

     

     

     

    All’evento erano presenti come sempre anche gli amici romani di DomusDotNet, Nicolò, Matteo, Massimo e Marco:

    37648_10150210754635051_807805050_13577673_7649282_n 37648_10150210754640051_807805050_13577674_8249127_n

    Come da abitudine l’evento si è prolungato la sera a tavola dove lo spessore degli speaker l’ha fatta ancora da padrone! Nonostante gli sforzi ancora una volta non sono riuscito a tenermi al livello dei commensali ma sto migliorando!

    37619_10150211912370051_807805050_13609343_3957961_n 37619_10150211912355051_807805050_13609340_4542395_n
    37619_10150211912360051_807805050_13609341_164870_n 37619_10150211912350051_807805050_13609339_6024857_n

     

     

     

    Un grazie di cuore a tutti gli organizzatori, in particolare a Gian Maria per l’ospitalità e al bellissimo gatto che mi ha preso subito in simpatia!

    Mettere offline un sito Asp.Net

    Oggi durante una docenza di aggiornamento interno mi sono reso conto che non molti sanno che è possibile mettere offline un sito Asp.Net semplicemente creando un file di nome app_offline.htm nella root dell’applicazione, una feature introdotta con Asp.Net 2.0.

    image 

    L’aggiunta di questo file determina lo shutdown dell’appdomain quindi vi ritroverete con un classico 404 se tentate di accedere al sito. La stesso effetto si può ottenere aggiungendo al web.config

       1:  <httpRuntime enable="false" />

    oppure se siete proprio svogliati potete farlo fare al  pannello di amministrazione del sito web…

    image 

    Quando può essere utile? Ad esempio quando dovete aggiornare il sito e non volete che gli utenti si colleghino mentre eseguite l’operazione. Ci sono altri modi per fare la stessa cosa… quelli illustrati sono compresi nel prezzo!

    -- Michele

    Calcolo del Codice Fiscale

    No, non è il solito post che vi spiega come calcolare il codice fiscale, di quelli ce ne sono a centinaia su internet, volevo solo segnalare un Web Service che fa tutto i lavoro per voi:

    image

    http://webservices.dotnethell.it/codicefiscale.asmx

    Se sapete di dovere essere sempre connessi… può essere molto utile!

    Certificazioni (parte 2): come ci esercitiamo?

    Riprendendo il precedente post volevo dare alcune indicazioni per prepararsi all’esame di certificazione. Molti esami, specie quelli Dev, hanno un libro di preparazione chiamato training kit, per il 70-536 ad esempio è questo:

    MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework Application Development Foundation, Second edition

    Occhio all’edizione che nella prima ci sono molti argomenti trattati più dettagliatamente e che quindi vi prenderebbero più tempo di studio (inutile per l’esame ma potrebbe essere utile per cultura personale…). Nel libro trovate alla fine di ogni capitolo un po’ di domande e un po’ di lab (secondo me fondamentali per chi non usa .net per lavoro) un CD con un software per esercitarvi e un voucher di sconto del 15% per l’esame. Esistono le traduzioni in italiano di questi libri ma considerando che costano il doppio e che l’esame è in inglese… Il bello del software del CD è che potete esercitarvi man mano che studiate filtrando le domande per argomenti, oltre alla simulazione dell’esame.

    Personalmente mi sento di consigliare anche un altro software che ho trovato molto utile oltre che economico: http://www.visualcertexam.com/ .

    Scaricate il programma, costa 15 euro mai spesi così bene, poi cercate su internet i file per i vari esami e vi esercitate senza tregua. Ho trovato molto utile anche la versione mobile (anch’essa del costo di 15 euro) per la quale però dovete convertire i file che trovate su internet in un formato apposito con un software scaricabile gratuitamente dallo stesso sito: chi ha poco tempo per esercitarsi ma prende spesso i mezzi pubblici come me troverà l’applicazione mobile molto utile.

    Se ci sono domande… non esitate a chiedere.

    -- Michele

    Più Post Pagina seguente »