novembre 2005 - Posts
Come postato da
Paolo siamo tornati operativi dopo la
nostra conferenza. Mi scuso con tutti per i pochi post tecnici dell'ultima settimana ma, avendo organizzato il tutto senza l'aiuto di service esterni, abbiamo passato gli ultimi giorni a stampare badge, pass, certificati di presenza, cartelloni, abbiamo caricato il furgoncino (di cui era saltata la prenotazione...), allestito le sale. Il tutto ci ha portato via energie e tempo, ma ne è valsa veramente la pena. I feedback sono stati molto positivi e tornare sul palco per due giorni insieme a Paolo è stato veramente divertente e stimolante. Abbiamo già iniziato la pianificazione di una serie di cose per il 2006: sono molto contento e tornerò da domani (giornata di lavoro domenicale) a postare regolarmente.
Mi sono arrivate due mail fra ieri e oggi sul significato di Override nell'Application Digram di VSTS. Condivido la risposta: il valore del chackbox Override (checked/unchecked) nei Settings & Constraint di un'applicazione nell'Application Diagram indica la possibilità di ridefinire il setting o il contraint all'interno dei System Diagram.
Iscrizioni aperte alla Microsoft Mobility Developer Conference II: evento gratuito del 15 Dicembre dovi si parlerà di sviluppo mobile con la piattaforma .NET Compact Framework 2.0, Visual Studio 2005 e SQL 2005 Mobile (tutti rilasciati settimana scorsa) .
La giornata si propone con una serie di sessioni che vanno dalle caratteristiche di base di VS 2005 fino all'approfondimento di alcune tecniche per l'ottimizzazione dell'accesso a SQL 2005 Mobile. Molti tips & tricks pubblicati su questo sito verrano presentati in esempi concreti che dimostrano l'efficacia di alcune tecniche spesso molto semplici da implementare. Particolare importanza verrà data alla sincronizzazione dei dati con un database (o comunque una sede) centrale via MSMQ, SQL 2005 Mobile, Web Service. Chiude la giornata una sessione sullo sviluppo server-side con ASP.NET 2.0.
In questi giorni con Fabio Santini stiamo ultimando i dettagli sull'agenda che...spero...mi vedrà coinvolto sul palco.
A brevissimo sarà disponibile l'agenda definitiva. Ho messo questo post da subito perchè possiate prenotare un posto da subito.
Questo l'estratto dal readme per l'installazione di WinFS Beta 1 su VS 2005 o VSTS 2005:
If you intend to use Visual Studio to develop "WinFS" applications, you must install Visual Studio 2005 before installing "WinFS". In addition, "WinFS" Beta 1 supports only the Beta 2 version of Visual Studio 2005 Professional Edition and Visual Studio 2005 Team System. If you are unable to install Visual Studio 2005 before installing "WinFS", you can run the configurevs.wsf script in the <drive>:\Program Files\Microsoft SDKs\WinFS\bin folder, where <drive> is the drive letter on which you installed "WinFS" Beta 1 to configure Visual Studio for use with "WinFS".
Come in ASP.NET 1.x, anche nella versione 2.0, quando si utilizza IIS6 in native mode, molti dei settaggi della sezione <processModel> del machine.config vengono ignorati in quanto configurabili dalla console di IIS 6 (per ogni Application Pool).
Nella versione 2.0 i settaggi NON ignorati nel machine.config sono i seguenti:
autoConfig, maxIoThreads, maxWorkerThreads, minIoThreads, minWorkerThreads, requestQueueLimit, responseDeadlockInterval
Il parametro autoConfig è una novità della 2.0 e consente di configurare in modo ottimale gli attributi maxWorkerThreads, maxIoThreads, minFreeThreads (HttpRutime), minLocalRequestFreeThreads (HttpRuntime), maxConnection (connectionManagement Element).
A fianco dei conosciuti maxWorkerThread e maxIOThread arrivano i corrispondenti valori minimi (minWorkerThread e minIOThread).
Come sempre occorre molta cautela nell'aumentare tali valori e soprattutto una verifica sul campo con stress test.
Perchè nessuno ne parla ?
In ASP.NET 2.0 ci sono molte novità sbandierate (dalle master page, ai temi, ai provider per gestire utenti, ruoli e profili). Sicuramente anche i nuovi controlli risulteranno molto utili nello sviluppo di interfacce web. Quello che però non viene quasi mai citato, e secondo me è invece più importante, sono le migliorate doti di scalabilità di ASP.NET 2.0, la semplificazione di processi per creare codice performante, i nuovi eventi a livello applicatione page, la possibilità di scrivere pagine asincrone che lavorano con thread pool di IO (liberando il thread che esegue la pagina), la nuova gestione delle transazioni distribuite, le caratteristiche di ADO.NET 2.0 per MARS e accesso asincrono ai DB.
Questo post solo per dire che le aree citate meritano approfondimento: non fermatevi alle caratteristiche sbandierate: c'è molto, ma molto di più.
Appena ho 10 minuti faccio un post con tutti i link a articoletti che ho scritto su asp.net 2.0, system.transaction, ado.net 2.0 in modo da dare una infarinatura di base su queste "cose" importanti
Per installare TFS Beta3 Refresh (allineata a VS 2005 Team Suite finale e SQL 2005 finale) seguire attentamente e scrupolosamente tutti i passi di installazione riportati nella guida.
Note
1) se usate SQL 2005 Developer, prima di iniziare l'installazione di TFS occorre abilitare le connessioni TCP/IP da Remoto (anche se installate single-server) che per default sono disabilitate nella Developer.
2) Occorre far partire il servizio Sql Server Agent prima dell'installazione di TFS: dovrebbe farlo lui durante il setup di SQL Server, ma nel mio caso non è stato così: dateci un occhio.
A volte mi stupisco...ho appena installato VS Team Suite (la parte client di Team System) sopra VS 2005...e funziona alla grande.
Mi immaginavo che si potesse fare visto che Team Suite ha strumenti aggiuntivi e essendo in 3 versioni (Developer, Architect, Tester) si potessero aggiungere e togliere in base alle licenze.
Ora la parte più complicata: installare la parte server seguendo passo passo passo passo passo (non è una ripetizione :-)) lo script di installazione.
Utilizzando l'attributo Async="true" su una pagina aspx, la classe generata dietro le quinte implementa anche IHttpAsyncHandler rendendo molto più semplice l'utilizzo di tecniche asincrone per l'accesso alle informazioni (ADO.NET 2.0 implementa metodi asincroni per l'accesso al DB). Non occorre più scrivere a mano una classe che implementi IHttpAsyncHandler perdendo le funzionalità classiche come User Control, Eventi, lifecycle etc (e nella 2.0 Master Page, Theme etc). E' vero che anche in ASP.NET 1.x si può ricorrere a trucchetti per utilizzare un IHttpAsyncHandler che esegua le operazioni asincorne per poi eseguire una Server.Transfer verso la pagina che invierà la response al client, oppure gestire le chiamate asincrone dal global.asax per poi lasciar proseguire la richiesta verso le pagine che invieranno i risultati, ma è altrettanto vero che con la 2.0 diventa tutto molto più semplice. Si possono usare anche le PageTask per tutte le situazioni in cui una chiamata asincrona mal riuscita non debba invalidare tutta la pagina.
Questo un estratto da una demo che faremo alla DevCon 2005 dove dedicheremo quasi un'ora alle gestione asincrona di risorse per rendere molto (molto vuol dire moltissimo) più scalabili le applicazioni che eseguano richieste a risorse remote (dove risorse vuol dire anche database).
Questa pagina invoca un web service in modo asincrono seguendo il nuovo pattern MethodAsync; Nel sorgente sono commentate le righe del pattern Begin/End. N.B. utilizziamo una master page che espone un metodo per eseguire trace condiviso di quando succede ai thread.
<%
@ Page Language="C#" Async ="true" MasterPageFile="~/MasterPage.master" %>
<%
@ MasterType VirtualPath="~/MasterPage.master" %>
<
script runat="server">
void Page_Load() {
Master.AddTraceMessage(
"SalvaAgente 2.0 Async");
SalesmanManagerWS.
SalesmanManagerWS ws = new SalesmanManagerWS.SalesmanManagerWS();
// Nuova riga
ws.SalvaAgenteCompleted +=
this.OnSalvaAgenteCompleted; // Non occre definire il delegate (fa lui)
// Non servono più
//IAsyncResult ar = ws.BeginSalvaAgente("robertob", "RobertoBrunetti", AgenteSalvato, ws);
//ar.AsyncWaitHandle.WaitOne();
ws.SalvaAgenteAsync(
"Robertob", "RobertoBrunetti");
Master.AddTraceMessage(
"SalvaAgente 2.0 Finito");
}
//Definizione più conforme alla normale gestione eventi
// private void AgenteSalvato(IAsyncResult ar)
private void OnSalvaAgenteCompleted(object sender, SalesmanManagerWS.SalvaAgenteCompletedEventArgs e)
{
// N.B. Typed Result (SalvaAgenteCompletedEventArgs)
// N.B. Il thread che esegue questo codice non è detto che sia lo stesso del Page_Load
Master.AddTraceMessage(
"SalvaAgente 2.0 Completed");
// Via sto casino
// SalesmanManagerWS.SalesmanManagerWS ws = (SalesmanManagerWS.SalesmanManagerWS)ar.AsyncState;
// bool ris = ws.EndSalvaAgente(ar);
bool ris = e.Result;
Master.AddTraceMessage(
"Risultato " + ris.ToString());
}
</
script>
Dietro le quinte viene generata questa classe che come si puà notare implementa IHttpAsyncHandler oltre a al classico IHttpHandler
public class _09chiamaunws20eventbased_aspx : Page, IHttpAsyncHandler, IHttpHandler
{
// Methods
public _09chiamaunws20eventbased_aspx();
private void __BuildControlTree(_09chiamaunws20eventbased_aspx __ctrl);
public virtual IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object data);
public virtual void EndProcessRequest(IAsyncResult ar);
protected override void FrameworkInitialize();
public override int GetTypeHashCode();
private void OnSalvaAgenteCompleted(object sender, SalvaAgenteCompletedEventArgs e);
private void Page_Load();
public override void ProcessRequest(HttpContext context);
// Properties
protected global_asax ApplicationInstance { get; }
public masterpage_master Master { get; }
protected DefaultProfile Profile { get; }
// Fields
private static object __fileDependencies;
private static bool __initialized;
}
Come promesso a agosto (si veda il mio post) è uscita la Beta3 (Refresh) di Team Foundation Server con la licenza GoLive e allineato alla versione finale di VS Team Suite. Team Suite è la parte client che comprende le tre versioni di Visual Studio 2005 Team System (Architect, Develeper, Tester). Per una introduzione su VSTS si veda l'articolo week.it (un po' datato).
Altre info
http://www.weekit.it/index.php?option=com_content&task=view&id=36853&Itemid=191
http://www.weekit.it/index.php?option=com_content&task=view&id=36815&Itemid=191
http://www.devleap.com/document.aspx?id=3792
Se siete alla ricerca della libreria ho inserito questo post http://thinkmobile.it/blogs/rob/archive/2005/11/02/4995.aspx su thinkmobile.it che cerca di fare luce sulla nuova organizzazione di directory (mobile) di VS 2005.
RoB