<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.NET</title>
        <link>http://blogs.ugidotnet.org/pietrolibroblog/category/ASP.NET.aspx</link>
        <description>ASP.NET</description>
        <language>it-IT</language>
        <copyright>Pietro Libro</copyright>
        <managingEditor>pietro.libro@libero.it</managingEditor>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Documentazione EF 7 (Beta 5)</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx</link>
            <description>Documentazione "Work in Progress" della prossima release di Entity Framework : http://ef.readthedocs.org/en/latest/&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/102030.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx</guid>
            <pubDate>Wed, 22 Jul 2015 09:07:28 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2015/07/22/documentazione-ef-7-beta-5.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/102030.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/102030.aspx</trackback:ping>
        </item>
        <item>
            <title>JSON.Merge</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/08/29/json.merge.aspx</link>
            <description>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&amp;lt;Car&amp;gt;(); 
}

Dove l’Action “JsonStringPost” accetta una stringa tipo:

"{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }"

Utilizzando, ad esempio il Composer di strumenti come Fiddler2 possiamo invocare il servizio:
 

Per ottenere una nuova istanza di Car con tutti gli Optionals:



Se il nostro servizio accetta direttamente un’istanza di oggetto invece di una stringa in formato JSON, il nostro codice cambia leggermente, come di seguito:

[HttpPost]
public void JsonObjectPost([FromBody] Car carByPost)
{
    JObject jCar = JObject.FromObject(carByPost);

    JObject jOptional = JObject.Parse(@"{Optionals :['Air Conditioned','Smoker'] }");
    jCar.Merge(jOptional, new JsonMergeSettings() { MergeArrayHandling = MergeArrayHandling.Union });

    string jsonFormat = jCar.ToString();
    Car mergedCar = jCar.ToObject();
}

Dove utilizziamo il metodo FromObject della classe JObject invece di Parse. Utilizzando Fiddler, passando come Body del messaggio la stringa (senza i doppi apici ad inizio e fine stringa)

{ 'Brand': 'Ferrari','Model': 'f450 Modena','Optionals': [] }

Otteniamo (ovviamente) lo stesso risultato dell’invocazione precedente. E’ possibile modificare il comportamento di “Merge” utilizzando l’enumerazione MergeArrayHandling. La classe Car (C#) è descritta nell’esempio, è la seguente:

public class Car
{
    public string Brand { get; set; }
    public string Model { get; set; }
    public string[] Optionals { get; set; }
}

La lista completa delle features aggiunte nel rilascio della versione 6.0 release 4 è disponibile qui.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101880.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/08/29/json.merge.aspx</guid>
            <pubDate>Fri, 29 Aug 2014 13:30:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/08/29/json.merge.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101880.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101880.aspx</trackback:ping>
        </item>
        <item>
            <title>Dynamic Data Provider per EF6 released</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx</link>
            <description>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 { get; set; }
    public int Pages { get; set; }
}

public class Db : DbContext
{
    public DbSet&amp;lt;Book&amp;gt; Books { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}


 

Nel Global.asax registriamo il nostro DbContext:

DefaultModel.RegisterContext(
            new Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(() =&amp;gt; new Db()),
            new ContextConfiguration { ScaffoldAllTables = true });


 

F5, per vedere in azione il nostro Data Site:







Discorso simile per l’utilizzo dell’EntityDataSource control.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101806.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx</guid>
            <pubDate>Mon, 03 Mar 2014 10:06:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/03/03/dynamic-data-provider-per-ef6-released.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101806.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101806.aspx</trackback:ping>
        </item>
        <item>
            <title>Windows Azure WebJobs (parte 3)</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/02/11/windows-azure-webjobs-parte-3.aspx</link>
            <description>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 coda (Queue) come da esempio:  public static void ProcessBobByQueueMessage([QueueInput(@"inputqueue")] string message,
    [BlobOutput(@"outputcontainer/resized_image.png")] Stream outputStream)
{

    if (!message.Equals("go"))
        return;

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
        System.Configuration.ConfigurationManager.ConnectionStrings["AzureJobsData"]
        .ConnectionString);

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobClient.GetContainerReference("inputcontainer");
    CloudBlob blob = container.GetBlobReference("TestPicture");

    Stream inputStream = new MemoryStream();

    blob.DownloadToStream(inputStream);

    ResizeImage(inputStream, outputStream);
}


 

La funzione “ProcessBobByQueueMessage” é invocata al momento che un messaggio contenente il testo “go” arriva nella coda denominata “inputqueue”, come nei casi precedenti, creiamo un nuovo Blob nel container “outputcontainer” con il nome di “resized_image.png”. Da notare che nel codice utilizziamo le clasi del namespace Microsoft.WindowsAzure.StorageClient per lavorare con le classi che rappresentano lo storage di Windows Azure. Per testare il tutto é sufficiente caricare il Job sul nostro Web Site di test o premere F5 e lavoare “in locale”. Tramite l’Azure Storage Explorer possiamo creare un nuovo messaggio con la dicitura “go” come da figura:



E nel container di output avremo:



Dal codice si evince come il nome del Blob di ouput (e di input) sia fissato, ma per un’applicazione reale questo non é un comportamento desiderabile, cosi’, sarebbe auspicabile avere un comportamento piu’ dinamico utilizzando (ad esempio) una classe “Custom” serializzata in JSON, contenente la definizione dei file (Blob) di Input ed Output e passata come messaggio testo alla coda, tradotto in codice:

 public static void ProcessBobByQueueCustomMessage([QueueInput(@"inputqueue")] ImageMessage message,
[BlobOutput(@"outputcontainer/{OutputName}")] Stream outputStream)
{
    CloudStorageAccount storageaccount = CloudStorageAccount.Parse(
       System.Configuration.ConfigurationManager.ConnectionStrings["AzureJobsData"]
       .ConnectionString);

    CloudBlobClient blobclient = storageaccount.CreateCloudBlobClient();
    CloudBlobContainer container = blobclient.GetContainerReference("inputcontainer");
    CloudBlob blob = container.GetBlobReference(message.InputName);

    Stream inputStream = new MemoryStream();

    blob.DownloadToStream(inputStream);

    ResizeImage(inputStream, outputStream);
}

 

Da notare l’utilizzo del placeHolder “{OutputName}” specificato nel percorso (BlobPath) ed accettato come argomento dall’attributo BlobPath, uguale alla proprietà omonima della classe ImageMessage, ed utilizzata per definire il nome del Blob di output in questo modo:

public class ImageMessage
{
    public string InputName { get; set; }
    public string OutputName { get; set; }
}


 

Per un giro di test è sufficiente creare un nuovo messagio con il testo seguente:



Ottenendo:





Interessante è l’utilizzo dell’attributo [NoAutomaticTrigger()] che indica all’istanza di “JobHost” di non far scattare un particolare metodo (magari per evitare che il job venga attivato quando non tutte le condizioni necessiaro sono presenti). Questo attributo non va d’accordo con l’attributo [QueueInput(…)] in quanto a runtime solleva un’eccezione con il messaggio seguente: “Can't have QueueInput and NoAutomaticTrigger on the same function.”.

Per invocare programmaticamente una funzione è sufficiente utilizzare il metodo Call() della classe JobHost:

host.Call(methodInfo);


 

Dove “methodInfo” puo’ essere facilmente calcolato tramite Reflection.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101771.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/02/11/windows-azure-webjobs-parte-3.aspx</guid>
            <pubDate>Tue, 11 Feb 2014 12:27:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/02/11/windows-azure-webjobs-parte-3.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101771.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101771.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Dynamic Data provider (preview) per EF6</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/01/31/asp.net-dynamic-data-provider-preview-per-ef6.aspx</link>
            <description>Rilasciato un aggiornamento per ASP.NET DynamicData e DataSourceControl per Entity Framework 6. Tutti i dettagli del caso sul blog originale.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101763.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/01/31/asp.net-dynamic-data-provider-preview-per-ef6.aspx</guid>
            <pubDate>Fri, 31 Jan 2014 10:23:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2014/01/31/asp.net-dynamic-data-provider-preview-per-ef6.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101763.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101763.aspx</trackback:ping>
        </item>
        <item>
            <title>Web Api e Debug su Azure</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/11/19/web-api-e-debug-su-azure.aspx</link>
            <description>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):                             Utilizzare la funzione Attach debugger per il Web Site oggetto del Debug:                        Si apre una nuova finestra del Browser con il Web Site     Aggiungiamo dove necessario i breakpoint nel codice (ad esempio su un’azione di GET del nostro Controller)     Invochiamo l’URL e per “magia” (la prima volta puo’ impiegare qualche di tempo) ci troviamo a debuggare la nostra applicazione appena pubblicata:            N.B: I passi precedenti si riferiscono all’utilizzo di VS 2013, per VS 2012 bisogna abilitare il remote debugging tramite il portale della nostra sottoscrizione Azure  &lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101726.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/11/19/web-api-e-debug-su-azure.aspx</guid>
            <pubDate>Tue, 19 Nov 2013 10:40:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/11/19/web-api-e-debug-su-azure.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101726.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101726.aspx</trackback:ping>
        </item>
        <item>
            <title>VS 2013 (Preview) : ASP.NET External Authentication</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/08/07/vs-2013-preview-external-authentication.aspx</link>
            <description>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 è quasi finito, nella Solution Explorer apriamo il file App_Start\Startup.Auth.cs e decommentiamo la riga relativa “UseGoogleAuthentication”:    Eseguiamo l’applicazione con F5, e dalla schermata principale possiamo scegliere se autenticarci in modalità classica oppure utilizzando un servizio di autenticazione esterno (nello specifico “Google”):    Decommentando le opportune righe di codice è possibile offrire agli utenti piu’ servizi di autenticazione, ad esempio, per aggiungere anche “Microsoft Authentication” (è necessario possedere un account come developer qui : http://go.microsoft.com/fwlink/?LinkID=144070)  modifichiamo il file di codice precedente aggiungendo “ClientId” and “Client Secret” come richiesto:    Eseguiamo con F5, ed ecco il risultato:    Semplice, no ?  Tutti gli approfondimenti del caso, sul sito di ASP.NET: http://www.asp.net/web-api/overview/security/external-authentication-services&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101636.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/08/07/vs-2013-preview-external-authentication.aspx</guid>
            <pubDate>Wed, 07 Aug 2013 10:13:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/08/07/vs-2013-preview-external-authentication.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101636.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101636.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET Web Api a Codemotion Roma 2013</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/22/asp.net-web-api-a-codemotion-roma-2013.aspx</link>
            <description>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.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101485.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/22/asp.net-web-api-a-codemotion-roma-2013.aspx</guid>
            <pubDate>Fri, 22 Mar 2013 19:39:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/22/asp.net-web-api-a-codemotion-roma-2013.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101485.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101485.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET and Web Tools 2012.2  : Web Api Help Page</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/09/asp.net-and-web-tools-2012.2-web-api-page.aspx</link>
            <description>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):
 
4) La classe XmlDocumentationProvider  che implementa l’interfaccia IDocumentationProvider permette di documentare le nostre API nel caso più semplice utilizzando i commenti che decorano le Web API direttamente nel codice (implementando l’interfaccia IDocumentationProvider é possibile personalizzare questo comportamento).
 
5) Aggiungiamo nel Global.asax.cs la riga di codice seguente:
config.Services.Replace(typeof(IDocumentationProvider), new XmlDocumentationProvider(HttpContext.Current.Server.MapPath("~/App_Data/file.xml")));

  
  
  
6) A questo punto non ci resta che eseguire la nostra applicazione e digitare “Help” nella barra degli indirizzi:
 
A questo punto é sufficiente passare alle personalizzazioni del caso :-).&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101466.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/09/asp.net-and-web-tools-2012.2-web-api-page.aspx</guid>
            <pubDate>Sat, 09 Mar 2013 14:46:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/03/09/asp.net-and-web-tools-2012.2-web-api-page.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101466.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101466.aspx</trackback:ping>
        </item>
        <item>
            <title>ASP.NET and Web Tools 2012.2 Update</title>
            <link>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/02/20/asp.net-and-web-tools-2012.2-update.aspx</link>
            <description>Rilasciata la versione finale di “ASP.NET and Web Tools 2012.2 Update”, un download che arrichisce, non di poco, le funzionalità esistenti, in Visual Studio 2012 e ASP.NET (tra le novità, OData EndPoint in ASP.NET Web API, ASP.NET SignalR, Single Page Applications).  Tutti i dettagli del caso sul post originale sul blog di Scott Guthrie.&lt;img src="http://blogs.ugidotnet.org/pietrolibroblog/aggbug/101445.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Pietro Libro</dc:creator>
            <guid>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/02/20/asp.net-and-web-tools-2012.2-update.aspx</guid>
            <pubDate>Wed, 20 Feb 2013 09:32:00 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/pietrolibroblog/archive/2013/02/20/asp.net-and-web-tools-2012.2-update.aspx#feedback</comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/pietrolibroblog/comments/commentRss/101445.aspx</wfw:commentRss>
            <trackback:ping>http://blogs.ugidotnet.org/pietrolibroblog/services/trackbacks/101445.aspx</trackback:ping>
        </item>
    </channel>
</rss>