<?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>Azure App Service | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/azure-app-service/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Tue, 05 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/azure-app-service/index.xml" rel="self" type="application/rss+xml"/><item><title>SQL MCP Server na Azure App Service — bez kontenerów</title><link>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/</guid><description>SQL MCP Server może teraz działać na Azure App Service bez Dockera ani Kubernetes. Co to oznacza dla deweloperów .NET budujących agentów AI komunikujących się z bazami SQL.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten post został przetłumaczony automatycznie. Aby zobaczyć oryginalną wersję, &lt;a href="https://thedotnetblog.com/pl/news/emiliano-montesdeoca/sql-mcp-server-azure-app-service-no-containers/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Szczerze mówiąc: za każdym razem, gdy w tutorialu widzę „wymaga kontenera&amp;quot;, coś we mnie wzdycha. Kontenery są świetne — dopóki twój zespół nie ma strategii kontenerowej, a funkcja, która wydawała się prosta, nagle blokuje się na nieoczekiwanej złożoności orkiestracji, której nikt nie zaplanował.&lt;/p&gt;
&lt;p&gt;Dlatego to przykuło moją uwagę. SQL MCP Server może teraz działać na Azure App Service — bez Dockera, bez Kubernetes, tylko z tym samym plikiem konfiguracyjnym Data API Builder (DAB), który eksponuje twoją bazę danych SQL przez MCP, REST i GraphQL.&lt;/p&gt;
&lt;h2 id="czym-jest-sql-mcp-server"&gt;Czym jest SQL MCP Server?&lt;/h2&gt;
&lt;p&gt;Krótkie wprowadzenie, jeśli jeszcze nie kojarzysz. SQL MCP Server siedzi pomiędzy twoim agentem AI a bazą danych SQL. Zamiast dawać agentowi bezpośredni dostęp do bazy (kiepski pomysł), eksponuje twoje tabele i widoki jako warstwę abstrakcji — encje z zdefiniowanymi uprawnieniami.&lt;/p&gt;
&lt;p&gt;Zbudowany na &lt;a href="https://learn.microsoft.com/pl-pl/azure/data-api-builder/"&gt;Data API Builder&lt;/a&gt;, co oznacza, że jeden plik konfiguracyjny zarządza MCP &lt;em&gt;i&lt;/em&gt; REST &lt;em&gt;i&lt;/em&gt; GraphQL jednocześnie. Agent komunikuje się z endpointem MCP. Tradycyjna aplikacja komunikuje się z REST lub GraphQL. Ta sama konfiguracja, to samo środowisko uruchomieniowe, różne powierzchnie.&lt;/p&gt;
&lt;p&gt;To naprawdę przydatne — nie musisz utrzymywać dwóch oddzielnych warstw API.&lt;/p&gt;
&lt;h2 id="problem-z-kontenerami-i-rozwiązanie"&gt;Problem z kontenerami (i rozwiązanie)&lt;/h2&gt;
&lt;p&gt;Pierwotny model wdrożenia SQL MCP Server używał kontenerów. Działa dobrze w wielu zespołach — ale nie we wszystkich. Wiele zespołów .NET standardyzuje na Azure App Service lub maszynach wirtualnych. Wymaganie środowiska uruchomieniowego kontenerów tylko po to, żeby wyeksponować endpoint SQL, dodaje tarcia, o które nikt nie prosił.&lt;/p&gt;
&lt;p&gt;Nowy przewodnik pokazuje, jak całkowicie pominąć kontener. Wszystko działa przez polecenie &lt;code&gt;dab start&lt;/code&gt;, hostowane na App Service jako standardowy proces webowy .NET 8.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Zainstaluj Data API Builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet tool install microsoft.dataapibuilder --prerelease -g
&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="c1"&gt;# Zainicjuj konfigurację&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab init --database-type mssql --host-mode Development --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;SQL_CONNECTION_STRING&amp;#39;)&amp;#34;&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="c1"&gt;# Dodaj encję&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab add products --source dbo.products --permissions &lt;span class="s2"&gt;&amp;#34;authenticated:*&amp;#34;&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="c1"&gt;# Skonfiguruj dostawcę uwierzytelniania App Service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab configure --runtime.host.authentication.provider AppService
&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="c1"&gt;# Uruchom serwer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;W tym momencie masz MCP pod &lt;code&gt;/mcp&lt;/code&gt;, REST i GraphQL z tego samego procesu — i nic nie działa w kontenerze.&lt;/p&gt;
&lt;h2 id="uwierzytelnianie-bez-wspólnych-kluczy-api"&gt;Uwierzytelnianie bez wspólnych kluczy API&lt;/h2&gt;
&lt;p&gt;To jest ta część, którą cenię najbardziej. Wdrażając na App Service, konfigurujesz Microsoft Entra ID jako dostawcę uwierzytelniania. Żadnych wspólnych sekretów w plikach konfiguracyjnych, żadnych kluczy API do rotacji.&lt;/p&gt;
&lt;p&gt;Ciąg połączenia pozostaje w zmiennych środowiskowych App Service (nie w &lt;code&gt;dab-config.json&lt;/code&gt;), a endpoint MCP jest chroniony uwierzytelnianiem platformy. Jeśli twoje obciążenia Azure są już zintegrowane z Entra ID, to naturalnie pasuje.&lt;/p&gt;
&lt;p&gt;Do lokalnego developmentu przełącz się na tryb &lt;code&gt;Simulator&lt;/code&gt; i transport STDIO. Wróć do trybu &lt;code&gt;AppService&lt;/code&gt; przed wdrożeniem. Czysto i jednoznacznie.&lt;/p&gt;
&lt;h2 id="wdrożenie-na-app-service"&gt;Wdrożenie na App Service&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;az appservice plan create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --sku B1 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --is-linux
&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;az webapp create &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plan &amp;lt;plan-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --runtime &lt;span class="s2"&gt;&amp;#34;DOTNETCORE:8.0&amp;#34;&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;az webapp config &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --name &amp;lt;app-name&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --resource-group &amp;lt;resource-group&amp;gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --startup-file &lt;span class="s2"&gt;&amp;#34;dab start&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Następnie wdróż swój projekt DAB metodą wdrożenia kodu, której twój zespół już używa. Kluczowy szczegół: to wdrożenie &lt;strong&gt;kodu&lt;/strong&gt;, nie kontenera.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne-dla-deweloperów-net"&gt;Dlaczego to ważne dla deweloperów .NET&lt;/h2&gt;
&lt;p&gt;Jeśli budujesz agentów AI w .NET, prędzej czy później agent będzie musiał komunikować się z bazą danych. SQL MCP Server daje ci ustrukturyzowany sposób, żeby to zrobić — bez eksponowania surowych ciągów połączenia.&lt;/p&gt;
&lt;p&gt;Sprawdź pełny przewodnik w &lt;a href="https://devblogs.microsoft.com/azure-sql/sql-mcp-server-app-service/"&gt;oryginalnym poście&lt;/a&gt; i &lt;a href="https://github.com/Azure-Samples/SQL-MCP-NoContainer"&gt;przykładowym repozytorium na GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;SQL MCP Server na App Service to praktyczny wybór dla zespołów .NET, które chcą dać agentom ustrukturyzowany dostęp do danych SQL bez strategii kontenerowej. Wypróbuj — twoi agenci docenią czysty interfejs API.&lt;/p&gt;</content:encoded></item></channel></rss>