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:

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.

Posted by Marco Minerva | with no comments
Filed under: , , ,

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:
Posted by Marco Minerva | with no comments
Filed under:

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: ,,
Posted by Marco Minerva | with no comments
Filed under:

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.

Technorati Tag: ,
Posted by Marco Minerva | with no comments
Filed under:

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.

Posted by Marco Minerva | with no comments
Filed under: ,

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ì!

Technorati Tag: ,,

Download di Visual Studio 2010 Ultimate in corso…

 

Technorati Tag: ,
Posted by Marco Minerva | with no comments
Filed under:

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.

Technorati Tag: ,,,

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:
Posted by Marco Minerva | with no comments
Filed under:

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 :-)

Posted by Marco Minerva | with no comments
Filed under: ,

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.

Technorati Tag: ,
Posted by Marco Minerva | with no comments
Filed under: ,

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 »