DotNetToscana non è mai decollata come avremmo voluto. Comunque noi non ci arrendiamo e ce la metteremo tutta per cambiare rotta ed imboccare quella giusta. Vogliamo approfittare di questa pausa estiva per riflettere sulle difficoltà ed i problemi che abbiamo incontrato più volte in questi anni e risolverli. Però per farlo al meglio abbiamo bisogno anche di sentire la vostra voce, per questo abbiamo creato un piccolo sondaggio grazie a cui potrte farci sapere le vostre opinioni, i vostri consigli e suggerimenti. L’obiettivo finale è quello di far “rinascere” DotNetToscana.
Clicca qui per rispondere al sondaggio
Technorati Tag:
Community
Chiunque programmi in ASP .NET conosce bene l’oggetto HttpContext, che consente di recuperare informazioni sul contesto HTTP della richiesta corrente; in particolare, la sua proprietà statica Current permette di ottenere, da qualunque punto del codice, il contesto corrente. Un suo tipico utilizzo consiste nell’inserire, all’interno della collezione Items, tutti gli oggetti che devono vivere per tutta la durata della richiesta HTTP.
WCF non offre “direttamente” un oggetto di questo tipo. Esso, però, mette a disposizione la proprietà OperationContext.Current.Extensions, grazie a cui possiamo aggiungere vere e proprie “estensioni” da associare al contesto della richiesta. In questo modo, possiamo facilmente creare una classe WcfContext, che si comporti in modo analogo a HttpContext:
' VB .NET
Imports System.ServiceModel
Friend Class WcfContext
Implements IExtension(Of OperationContext)
Private ReadOnly m_items As IDictionary
Private Sub New()
m_items = New Hashtable()
End Sub
Public ReadOnly Property Items() As IDictionary
Get
Return m_items
End Get
End Property
Public Shared ReadOnly Property Current() As WcfContext
Get
If OperationContext.Current Is Nothing Then
Return Nothing
End If
Dim extensions = OperationContext.Current.Extensions
Dim context As WcfContext = extensions.Find(Of WcfContext)()
If context Is Nothing Then
context = New WcfContext()
extensions.Add(context)
End If
Return context
End Get
End Property
Public Sub Attach(ByVal owner As OperationContext) Implements IExtension(Of OperationContext).Attach
End Sub
Public Sub Detach(ByVal owner As OperationContext) Implements IExtension(Of OperationContext).Detach
End Sub
End Class
// C#
using System;
using System.Collections;
using System.Collections.Generic;
using System.ServiceModel;
/// <exclude />
public class WcfContext : IExtension<OperationContext>
{
private readonly IDictionary m_items;
private WcfContext()
{
m_items = new Hashtable();
}
public IDictionary Items
{
get { return m_items; }
}
public static WcfContext Current
{
get
{
if (OperationContext.Current == null)
return null;
var extensions = OperationContext.Current.Extensions;
WcfContext context = extensions.Find<WcfContext>();
if (context == null)
{
context = new WcfContext();
extensions.Add(context);
}
return context;
}
}
public void Attach(OperationContext owner)
{ }
public void Detach(OperationContext owner)
{ }
}
La proprietà WcfContext.Current controlla se, tra le estensioni dell’oggetto OperationContext, ne esiste una di tipo WcfContext; in caso positivo, la restituisce, altrimenti la crea e la aggiunge alla collezione. Questo oggetto espone poi una proprietà di nome Items e tipo IDictionary, che dunque si comporta esattamente come l’analogo di HttpContext.
Questa mattina, tentando di eseguire una stored procedure contenuta in un database di SQL Server 2005 da un’applicazione ASP .NET, mi è apparso un errore alquanto strano:
Named Pipes Provider: Could not open a connection to SQL Server [53].
Inutile dire che la connessione al server attraverso il Management Studio funzionava senza problemi. Facendo altri test, inoltre, ho verificato che tutte le altre funzioni si comportavano correttamente: in pratica, era una sola stored procedure a lanciare quell’errore. Alla fine, ho scoperto l’arcano: la stored procedure tentava un collegamento ad un linked server irraggiungibile… E dunque, il messaggio di errore era veritiero, il problema era capire a quale server si riferisse!
Technorati Tag:
SQL Server
Perdonate la lunghezza del titolo, ma non sapevo come riassumere la situazione… In pratica, la situazione è questa: ho un metodo (chiamiamolo A) che restituisce una classe al cui interno è contenuta una proprietà di tipo List<T>; ho poi un altro metodo (B) che prende in ingresso un oggetto dello stesso tipo (per effettuare degli aggiornamenti, ma questa è un’altra storia). Il metodo A funziona senza problemi; al contrario, invocando il metodo B, ancor prima di entrare nel codice del servizio WCF, si ottiene una eccezione di tipo NullReferenceException.
L’origine del problema è semplice: la proprietà di tipo List<T> contiene il metodo get, ma non il set: quest’ultimo non viene utilizzato quando l’oggetto è restituito, mentre serve quando siamo noi che vogliamo passare tale oggetto al servizio.
Technorati Tag:
.NET,
Programming,
WCF
Una piccola grande novità per chi utilizza la versione Express di SQL Server: con la release 2008 R2, la dimensione massima di un database è stata incrementata da 4 a 10 GB.
Purtroppo tutti sappiamo che, spesso, i CSS validi per un browser non lo sono per un altro, con il risultato che dobbiamo adottare soluzioni più o meno fantasiose per creare siti che si vedano correttamente sulle diverse piattaforme. Proprio oggi ho dovuto affrontare nuovamente questo problema e, dopo aver girato un po’ su Internet alla ricerca di una soluzione “elegante”, sono incappato nel progetto CSS Browser Selector: si tratta di una piccola funzione Javascript che, una volta aggiunta al proprio sito, consente di creare CSS condizionali utilizzando una sintassi molto semplice. Ad esempio:
<style type="text/css">
.example {
width: 100px;
height: 100px;
}
.ie .example {
background-color: yellow
}
.gecko .example {
background-color: red
}
</style>
In questo caso, la classe example definisce le dimensioni 100x100, che sono valide per tutti i browser. Successivamente, con l’indicazione .ie .example, si specifica che, nel caso di Internet Explorer, lo sfondo deve essere giallo, oppure rosso per Firefox (identificato da gecko). Alla pagina http://rafael.adm.br/css_browser_selector/ sono comunque disponibili i codici per tutti i browser supportati.
Ero indeciso fino all’ultimo… Ma alla fine sono riuscito ad organizzarmi: domani sarò alla Real Code Conference a Firenze. A causa di impegni sempre più incalzanti, ultimamente ho saltato numerosi eventi e meeting, ma spero che questa sia l’occasione per ricominciare! E spero anche di approfittarne per incontrare qualche amico .NETtiano!
Per chi sarà a Firenze domani… Ci vediamo lì!
Download di Visual Studio 2010 Ultimate in corso…
Nella nuova sezione Recensioni di DotNetToscana è disponibile un articolo relativo a Crypto Obfuscator for .Net 2010, un programma per la protezione del codice sorgente .NET tramite “offuscamento”. Lo potete leggere sia in italiano sia in inglese.
Martedì 23 Marzo, dalle 15 alle 16, Microsoft Italia terrà una sessione di chat dedicata alla novità del Mix 2010 (Silverlight 4 RC, Windows Phone 7 Series, IE9 e HTML 5, jQuery, OData). Per partecipare, è sufficiente collegarsi a questo link il giorno dell’evento.
Poco fa sono andato su CodePlex per scaricare l’aggiornamento di un programma, e nella sezione Releases ho trovato questo:
ASP.NET MVC 2 RTM - Mar 11 2010 This release contains the source code for ASP.NET MVC 2 RTM as well as the ASP.NET MVC Futures project. The futures project contains features that ...
A quanto pare il rilascio è di poche ore fa… Chi è interessato solo ai binari, può effettuarne il download dal sito Microsoft.
La giornata non poteva cominciare meglio:
CONGRATULATIONS! Your group (DotNetToscana) has been approved to be an INETA member based on your dedication to the .NET user group community. Welcome to INETA!
Si tratta sicuramente di un grande notizia per la nostra Community, uno stimolo a continuare la strada che abbiamo intrapreso. Un grazie di cuore anche a tutti i nostri “seguaci”, che sono stati i veri fautori del raggiungimento di questo obiettivo!
Technorati Tag:
Community
Il .NET Framework fornisce un semplicissimo metodo per recuperare l’icona associata ad un file eseguibile, System.Drawing.Icon.ExtractAssociatedIcon. E’ possibile utilizzarlo, ad esempio, per impostare automaticamente l’icona della form principale della nostra applicazione sull’immagine specificata nelle proprietà del progetto:
Me.Icon = Drawing.Icon.ExtractAssociatedIcon(Application.ExecutablePath)
Semplice e veloce :-)
Da oggi potete iscrivervi alle Newsletter di TechNet e MSDN Flash sfruttando il link messo a disposizione sulla Home Page di DotNetToscana. La procedura è molto veloce, e vi verrà richiesto di selezionare le Community a cui appartenete e/o quelle tramite le quali siete venuti a conoscenza delle Newsletter Microsoft.
E’ finalmente disponibile online il materiale presentato durante il Community Tour di DotNetToscana svoltosi lo scorso 12 Gennaio. Chi è interessato può accedere all’archivio contenente le slide e gli esempi visitando la sezione Files del nostro sito.
More Posts
Next page »