<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Deployment | The .NET Blog</title><link>https://thedotnetblog.com/it/tags/deployment/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>it</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 30 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/it/tags/deployment/index.xml" rel="self" type="application/rss+xml"/><item><title>Il Tuo Agente MAF Locale Ha Appena Trovato Casa in Produzione</title><link>https://thedotnetblog.com/it/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</link><pubDate>Sat, 30 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/it/news/emiliano-montesdeoca/maf-agent-local-to-production-foundry-hosted-agents/</guid><description>Foundry Hosted Agents dà al tuo agente Microsoft Agent Framework identità, scaling, persistenza delle sessioni e osservabilità senza configurazione aggiuntiva. Ecco come si presenta in pratica.</description><content:encoded>&lt;p&gt;Far funzionare un agente localmente è la parte divertente. La parte difficile è tutto ciò che viene dopo: distribuirlo senza impazzire, gestire le sessioni, configurare l&amp;rsquo;identità, collegare l&amp;rsquo;osservabilità. Di solito questo significa molta infrastruttura personalizzata.&lt;/p&gt;
&lt;p&gt;Foundry Hosted Agents ha appena rimosso la maggior parte di quella infrastruttura per gli utenti di Microsoft Agent Framework (MAF).&lt;/p&gt;
&lt;h2 id="cosa-fa-realmente-foundry-hosted-agents"&gt;Cosa Fa Realmente Foundry Hosted Agents&lt;/h2&gt;
&lt;p&gt;Quando distribuisci un agente MAF in Foundry Hosted Agents, la piattaforma gestisce una lista sorprendentemente lunga di cose che altrimenti dovresti costruire tu stesso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scala a zero&lt;/strong&gt; — il tuo agente non costa nulla quando è inattivo e si riavvia automaticamente&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sandbox isolati per VM per sessione&lt;/strong&gt; — ogni sessione utente ottiene il proprio sandbox con persistenza del filesystem che sopravvive agli eventi di riduzione dello scale&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entra ID integrato&lt;/strong&gt; — ogni agente ottiene la propria identità per chiamare modelli Foundry, Toolbox e servizi Azure senza segreti nell&amp;rsquo;immagine&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deployment versionati&lt;/strong&gt; — ogni deployment è uno snapshot immutabile, con supporto per blue/green e canary rollout&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Osservabilità senza configurazione&lt;/strong&gt; — &lt;code&gt;APPLICATIONINSIGHTS_CONNECTION_STRING&lt;/code&gt; viene iniettato a runtime in modo che le tracce OpenTelemetry di MAF fluiscano automaticamente in App Insights&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Quest&amp;rsquo;ultimo è genuinamente piacevole. Nessun cablaggio aggiuntivo, nessuna configurazione extra. Le tracce appaiono semplicemente.&lt;/p&gt;
&lt;h2 id="la-differenza-nel-codice-è-minima"&gt;La Differenza nel Codice È Minima&lt;/h2&gt;
&lt;p&gt;Questo è ciò che apprezzo di più di questa integrazione. Non riscrivi il tuo agente. Lo avvolgi semplicemente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;In .NET:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry.Hosting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;WebApplication&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateBuilder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Services&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Build&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MapFoundryResponses&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;In Python:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ResponsesHostServer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tutto qui. La stessa logica che hai testato localmente è ciò che gira in produzione. La piattaforma la avvolge nell&amp;rsquo;infrastruttura di gestione delle sessioni, identità e scaling.&lt;/p&gt;
&lt;h2 id="due-protocolli-un-agente"&gt;Due Protocolli, Un Agente&lt;/h2&gt;
&lt;p&gt;Gli Hosted Agents supportano due stili di endpoint:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Responses&lt;/strong&gt; (&lt;code&gt;/responses&lt;/code&gt;) — compatibile con OpenAI, gestisce la cronologia delle conversazioni e lo streaming. Buon default per agenti a forma di chat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Invocations&lt;/strong&gt; (&lt;code&gt;/invocations&lt;/code&gt;) — tu definisci lo schema richiesta/risposta. Buono per workflow non conversazionali.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Se stai costruendo qualcosa che assomiglia a una conversazione, inizia con Responses. Se stai costruendo un agente a forma di API che prende input strutturato e restituisce output strutturato, Invocations ti dà la flessibilità.&lt;/p&gt;
&lt;h2 id="il-flusso-di-deployment-con-azd"&gt;Il Flusso di Deployment con &lt;code&gt;azd&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Quando esegui &lt;code&gt;azd up&lt;/code&gt; con un agente MAF:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crea opzionalmente un progetto Foundry e distribuisce un modello&lt;/li&gt;
&lt;li&gt;Impacchetta il tuo codice e carica un&amp;rsquo;immagine su Azure Container Registry&lt;/li&gt;
&lt;li&gt;Provvede compute dall&amp;rsquo;immagine ACR&lt;/li&gt;
&lt;li&gt;Assegna un Entra ID dedicato all&amp;rsquo;agente&lt;/li&gt;
&lt;li&gt;Espone un endpoint stabile (&lt;code&gt;https://{project_endpoint}/agents/{agent_name}&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Gestisce tutto il resto da quel punto in poi&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Le sessioni persistono per un massimo di 30 giorni. Il compute inattivo viene deprovisionato dopo 15 minuti e ripristinato trasparentemente alla successiva richiesta. Dal punto di vista dell&amp;rsquo;agente, nulla è cambiato.&lt;/p&gt;
&lt;h2 id="conclusione"&gt;Conclusione&lt;/h2&gt;
&lt;p&gt;La distanza tra &amp;ldquo;funzionante localmente&amp;rdquo; e &amp;ldquo;in esecuzione in produzione&amp;rdquo; è stata storicamente lunga e dolorosa per gli agenti AI. Foundry Hosted Agents + MAF riduce significativamente questo divario. Se hai già un agente locale costruito con Agent Framework, vale la pena provarlo oggi.&lt;/p&gt;
&lt;p&gt;Il team dice che GA arriverà presto — questo è attualmente in preview. Consulta i &lt;a href="https://learn.microsoft.com/en-us/agent-framework/hosting/foundry-hosted-agent"&gt;documenti di integrazione MAF Hosted Agent&lt;/a&gt; e gli &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/04-hosting/FoundryHostedAgents"&gt;esempi .NET&lt;/a&gt; per iniziare.&lt;/p&gt;
&lt;p&gt;Articolo originale: &lt;a href="https://devblogs.microsoft.com/agent-framework/from-local-to-production-deploy-your-microsoft-agent-framework-agent-with-foundry-hosted-agents/"&gt;From Local to Production: Deploy Your Microsoft Agent Framework Agent with Foundry Hosted Agents&lt;/a&gt;&lt;/p&gt;</content:encoded></item></channel></rss>