Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Centrum úloh představuje aktuální stav aplikace v úložišti, včetně všech čekajících prací. Zatímco aplikace běží, centrum úloh průběžně ukládá průběh orchestrace, aktivity a funkcí entit. Tento přístup zajišťuje, že aplikace může pokračovat ve zpracování tam, kde skončila, pokud se restartuje po dočasném zastavení nebo přerušení. Centrum úloh také umožňuje aplikacím dynamicky škálovat výpočetní procesy.
Tento článek vysvětluje, co centrum úloh ukládá, jak nakonfigurovat a pojmenovat centra úloh, jak je vytvářet a spravovat pomocí různých back-endů úložiště a jak fungují centra úloh interně.
Důležité
Support pro model v procesu skončí 10. listopadu 2026. Důrazně doporučujeme migrovat aplikace do izolovaného modelu pracovních procesů pro plnou podporu.
Centrum úloh ukládá koncepčně následující informace:
- Stavy instancí všech instancí orchestrace a instancí entit.
- Zprávy, které se mají zpracovat, včetně:
- Všechny zprávy o aktivitách, které představují aktivity čekající na spuštění.
- Všechny zprávy instancí, které čekají na doručení instancím.
Zprávy o aktivitách jsou bezstavové a mohou být zpracovány kdekoli. Zprávy instance musí být doručeny do konkrétní instance s uloženým stavem (orchestrace nebo entity) identifikované pomocí ID instance.
Každý poskytovatel úložiště může interně používat jinou organizaci k reprezentaci stavů instancí a zpráv. Poskytovatel Azure Storage například ukládá zprávy ve frontách Azure Storage, ale poskytovatel MSSQL je ukládá do relačních tabulek. Tyto rozdíly nezáleží na návrhu aplikace, ale některé z nich můžou ovlivnit charakteristiky výkonu. Další informace naleznete v tématu Reprezentace v úložišti.
SDK Durable Task používají nástroj Durable Task Scheduler jako backend pro úlohová centra. Durable Task Scheduler je plně spravovaná služba, která interně zpracovává úložiště.
Názvy centra úloh
Centra úloh jsou identifikována názvem, který odpovídá těmto pravidlům:
- Obsahuje pouze alfanumerické znaky.
- Začíná písmenem
- Má minimální délku 3 znaků, maximální délku 45 znaků.
Deklarujte název centra úloh v souboru host.json , jak je znázorněno v následujícím příkladu:
host.json (funkce 2.0)
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "MyTaskHub"
}
}
}
host.json (funkce 1.x)
{
"durableTask": {
"hubName": "MyTaskHub"
}
}
Centrum úloh můžete také nastavit pomocí nastavení aplikace, jak je znázorněno v následujícím host.json ukázkovém souboru:
host.json (funkce 2.0)
{
"version": "2.0",
"extensions": {
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
}
host.json (funkce 1.x)
{
"durableTask": {
"hubName": "%MyTaskHub%"
}
}
Název centra úloh je nastavený na hodnotu MyTaskHub nastavení aplikace. Následující local.settings.json soubor ukazuje, jak definovat MyTaskHub nastavení jako samplehubname:
{
"IsEncrypted": false,
"Values": {
"MyTaskHub" : "samplehubname"
}
}
Poznámka:
Při použití slotů nasazení je osvědčeným postupem nastavit název centra úloh pomocí nastavení aplikace. Pokud chcete zajistit, aby konkrétní slot vždy používal konkrétní centrum úloh, použijte nastavení aplikace "slot-sticky".
Kromě host.jsonje možné také nastavit názvy centra úloh v metadatech vazby klienta orchestrace . Toto nastavení je užitečné, když potřebujete přistupovat k orchestrace nebo entitám, které žijí v samostatné funkční aplikaci. Následující kód ukazuje, jak napsat funkci, která používá vazbu klienta orchestrace pro práci s centrem úloh, které je nastavené jako nastavení aplikace:
Izolovaný model pracovního procesu
[Function("HttpStart")]
public static async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "orchestrators/{functionName}")] HttpRequestData req,
[DurableClient(TaskHub = "%MyTaskHub%")] DurableTaskClient starter,
string functionName,
FunctionContext executionContext)
{
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
string instanceId = await starter.ScheduleNewOrchestrationInstanceAsync(functionName, requestBody);
ILogger logger = executionContext.GetLogger("HttpStart");
logger.LogInformation("Started orchestration with ID = '{instanceId}'.", instanceId);
return await starter.CreateCheckStatusResponseAsync(req, instanceId);
}
Model v probíhajícím procesu
[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient(TaskHub = "%MyTaskHub%")] IDurableOrchestrationClient starter,
string functionName,
ILogger log)
{
// Function input comes from the request content.
object eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
Poznámka:
Předchozí příklad je pro Durable Functions 2.x. Pro Durable Functions 1.x místo DurableOrchestrationContext použijte IDurableOrchestrationContext. Další informace o rozdílech mezi verzemi najdete v článku o verzích Durable Functions .
Poznámka:
Nastavení názvů center úloh v metadatech vazby klienta je nezbytné pouze tehdy, když používáte jednu aplikaci funkcí ke zpřístupnění orkestrací a entit v jiné aplikaci funkcí. Pokud jsou klientské funkce definované ve stejné aplikaci funkcí jako orchestrace a entity, vyhněte se zadávání názvů center úloh v metadatech vazby. Ve výchozím nastavení získají všechny klientské vazby metadata centra úloh z nastavení host.json.
Pokud není zadaný, použije se výchozí název centra úloh, jak je znázorněno v následující tabulce:
| Verze rozšíření Durable | Výchozí název centra úloh |
|---|---|
| 2.x | Při nasazení v Azure se název centra úloh odvozuje od názvu funkční aplikace. Při spuštění mimo Azure je výchozí název centra úloh TestHubName. |
| 1.x | Výchozí název centra úloh pro všechna prostředí je DurableFunctionsHub. |
Další informace o rozdílech mezi verzemi rozšíření najdete v článku verze Durable Functions.
Použití více aplikací s samostatnými rozbočovači úloh
Každá aplikace, která sdílí back-end, by se měla připojit k vlastnímu centru úloh, aby nedocházelo ke konfliktům. Pokud více aplikací používá stejné centrum úloh, soutěží o zprávy, což může vést k nedefinovanému chování – včetně nečekaně zablokovaných orchestrací. Jeden back-end může obsahovat více task hubů; nakonfigurujte každou aplikaci vlastním task hubem.
Tento požadavek platí pro všechny back-endy úložiště. U poskytovatelů úložiště BYO (Azure Storage, Netherite, MSSQL) nakonfigurujte každou aplikaci funkcí s názvem samostatného centra úloh. Tento požadavek platí také pro přípravné sloty: nakonfigurujte každý přípravný slot s jedinečným názvem centra úloh.
Důležité
Ve výchozím nastavení se název aplikace používá jako název centra úloh, což zajišťuje, že nedojde k náhodnému sdílení. Pokud explicitně nakonfigurujete názvy centra úloh v host.json, ujistěte se, že názvy jsou jedinečné. Jedinou výjimkou je, pokud nasadíte kopie stejné aplikace ve více oblastech pro zotavení po havárii. V takovém případě použijte stejné centrum úloh pro kopie.
Následující diagram znázorňuje jedno centrum úloh pro každou funkční aplikaci ve sdílených a dedikovaných účtech úložiště Azure.
Správa centra úloh Plánovač úloh Durable Task Scheduler
Tato část popisuje, jak vytvořit a spravovat centra úloh při použití back-endu plánovače úloh Durable Task Scheduler. Vytvořte prostředky plánovače a centra úloh explicitně předtím, než je vaše aplikace použije.
Vytvoření plánovače a centra úloh
Pomocí portálu Azure, Azure CLI, Azure Resource Manager (ARM) nebo Bicep vytvořte plánovač a centrum úloh.
Na portálu Azure vyhledejte Durable Task Scheduler a vyberte ho z výsledků.
Výběrem Vytvořit otevřete podokno pro tvorbu plánovače.
Vyplňte pole na kartě Základy, včetně skupiny prostředků, názvu plánovače, oblasti a SKU. Vyberte možnost Zkontrolovat a vytvořit.
Po ověření vyberte Vytvořit. Nasazení trvá až 15 minut.
Po vytvoření plánovače přejděte k zdroji plánovače. Na stránce Přehled vytvořte nové centrum úloh.
Důležité
Seznam 0.0.0.0/0 povolených IP adres povoluje přístup z jakékoli IP adresy. V případě produkčních nasazení omezte tuto možnost jenom na požadované rozsahy IP adres.
Předchozí příklady používají skladovou položku Dedicated. Plánovač trvalých úloh také nabízí skladovou položku Consumption. Další informace o správě prostředků Plánovače trvalých úloh naleznete v tématu Vývoj pomocí Durable Task Scheduler.
Konfigurace ověřování na základě identit
Durable Task Scheduler podporuje pouze ověřování spravovaných identit. Nepodporuje řetězce připojení s klíči úložiště. Přiřaďte spravované identitě příslušnou roli řízení přístupu na základě role (RBAC) a nakonfigurujte aplikaci tak, aby tuto identitu používala.
K dispozici jsou následující role:
| Úloha | Description |
|---|---|
| Přispěvatel dat trvalých úloh | Úplný přístup k datům Nadmnožina všech ostatních rolí |
| Pracovník pro trvalé úkoly | Zapojte se do práce s plánovačem pro zpracování orchestrací, aktivit a entit. |
| Čtečka dat pro trvalé úlohy | Přístup jen pro čtení k orchestraci a datům entit. |
Poznámka:
Většina aplikací vyžaduje roli Přispěvatel dat trvalých úloh .
Pokud je to možné, používejte spravované identity přiřazené uživatelem, protože nejsou svázané s životním cyklem aplikace a po odebrání aplikace je můžete znovu použít.
Na portálu Azure přejděte k prostředku plánovače nebo centra úloh.
Z nabídky vlevo vyberte Řízení přístupu (IAM).
Vyberte Přidat>Přidat úlohu.
Vyhledejte a vyberte Durable Task Data Contributor. Zvolte Další.
Pro přiřazení přístupu vyberte Spravovaná identita. Vyberte a vyberte členy.
Vyberte spravovanou identitu přiřazenou uživatelem, zvolte identitu a vyberte Vybrat.
Vyberte Zkontrolovat a přiřadit k dokončení.
Přejděte do aplikace funkcí a vyberte Nastavení>Identita. Vyberte kartu Přiřazeno uživatelem a přidejte identitu.
Po přiřazení identity přidejte do aplikace následující proměnné prostředí:
| Proměnná | Hodnota |
|---|---|
TASKHUB_NAME |
Název centra úloh. |
DURABLE_TASK_SCHEDULER_CONNECTION_STRING |
Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id} |
Poznámka:
Pokud použijete spravovanou identitu přiřazenou systémem, vynecháte segment ClientID ze připojovací řetězec: Endpoint={scheduler endpoint};Authentication=ManagedIdentity.
Úplné podrobnosti o konfiguraci identity naleznete v tématu Konfigurace spravované identity pro Durable Task Scheduler.
Správa centra úloh poskytovatele úložiště BYO
Tato část se zabývá vytvořením a odstraněním centra úloh a kontrolou obsahu centra úloh. Platí pro poskytovatele úložiště BYO (Bring-your-Own): Azure Storage, Netherite a MSSQL.
Důležité
Pokud používáte poskytovatele úložiště BYO, zodpovídáte za zabezpečení základních prostředků úložiště. Přístup k zápisu do úložiště centra úloh lze použít ke změně chování aplikace, včetně aktivace libovolného spuštění kódu. Používejte připojení založená na identitě, uplatňujte RBAC podle principu nejnižších oprávnění a omezte síťový přístup. Úplný kontrolní seznam pro posílení zabezpečení najdete v tématu Zabezpečení úložiště centra úloh.
Vytvoření a odstranění center úloh
Prázdné centrum úloh se všemi požadovanými prostředky se automaticky vytvoří v úložišti při prvním spuštění aplikace funkcí.
Pokud použijete poskytovatele Azure Storage, nevyžaduje se žádná další konfigurace. V opačném případě postupujte podle pokynů pro konfiguraci poskytovatelů úložiště , abyste zajistili, že poskytovatel úložiště může správně nastavit a získat přístup k prostředkům úložiště požadovaným pro centrum úloh.
Poznámka:
Centrum úloh se při zastavení nebo odstranění aplikace funkcí automaticky neodstraní. Pokud chcete tato data odebrat, odstraňte ručně centrum úloh, jeho obsah nebo účet úložiště.
Návod
Ve scénáři vývoje možná budete muset restartovat z čistého stavu často. Pokud to chcete udělat rychle, stačí změnit název nakonfigurovaného centra úloh. Tato změna vynutí vytvoření nového prázdného centra úloh při restartování aplikace. Stará data se v tomto případě neodstraní.
Kontrola obsahu centra úloh
Obsah centra úloh můžete zkontrolovat několika běžnými způsoby:
- V rámci funkční aplikace poskytuje objekt klienta metody pro dotazování úložiště instancí. Další informace o podporovaných typech dotazů najdete v článku Správa instancí .
- Podobně rozhraní HTTP API nabízí požadavky REST na dotazování stavu orchestrací a entit. Další podrobnosti najdete v referenčních informacích k rozhraní API HTTP .
- Nástroj Durable Functions Monitor může zkontrolovat centra úloh a nabízí různé možnosti pro vizuální zobrazení.
U některých poskytovatelů úložiště můžete také zkontrolovat centrum úloh tak, že přejdete přímo do podkladového úložiště:
- Pokud používáte zprostředkovatele Azure Storage, jsou stavy instancí uložené v tabulce Nastance Table a History Table, které můžete zkontrolovat pomocí nástrojů, jako je Průzkumník služby Azure Storage.
- Pokud používáte poskytovatele úložiště MSSQL, použijte dotazy a nástroje SQL ke kontrole obsahu centra úloh v databázi.
Pracovní položky
Zprávy aktivit a zprávy instancí v centru úloh představují práci, kterou aplikace potřebuje zpracovat. Když je aplikace spuštěná, průběžně načítá pracovní položky z centra úloh. Každá pracovní položka zpracovává jednu nebo více zpráv. Existují dva typy pracovních položek:
- Pracovní položky aktivity: Spuštěním funkce aktivity zpracujete zprávu o aktivitě.
- Pracovní položky nástroje Orchestrator: Spuštěním funkce orchestrátoru nebo entity zpracujete jednu nebo více zpráv instance.
Pracovníci mohou zpracovávat více pracovních položek současně, podléhajících konfigurovaným limitům souběžnosti pro jednotlivé pracovníky.
Další informace o omezeních souběžnosti najdete v tématu Výkon a škálování.
Jakmile pracovník dokončí pracovní položku, potvrdí změny zpět do úlohového centra. Tyto efekty se liší podle typu spuštěné funkce:
- Dokončená funkce aktivity vytvoří zprávu instance obsahující výsledek adresovaný nadřazené instanci orchestrátoru.
- Dokončená funkce orchestrátoru aktualizuje stav a historii orchestrace a může vytvářet nové zprávy.
- Dokončená funkce entity aktualizuje stav entity a může také vytvářet nové zprávy instance.
U orchestrací představuje každá pracovní položka jednu epizodu provedení této orchestrace. Epizoda je jedno kolo spuštěného orchestrátoru, zpracování dostupných výsledků a následné pozastavení až do příchodu dalšího výsledku. Například epizoda začíná, když se orchestrace zahájí, když se aktivita dokončí a vrátí výsledek nebo když přijde externí událost. Epizoda končí, když orchestrátor dokončí nebo dosáhne bodu, kde musí čekat na nové zprávy.
Příklad spuštění
Zvažte orchestraci typu fan-out-fan-in, která zahajuje dvě činnosti souběžně a poté čeká na jejich dokončení.
Izolovaný model pracovního procesu
[Function("Example")]
public static async Task Run([OrchestrationTrigger] TaskOrchestrationContext context)
{
Task t1 = context.CallActivityAsync("MyActivity", 1);
Task t2 = context.CallActivityAsync("MyActivity", 2);
await Task.WhenAll(t1, t2);
}
Model v probíhajícím procesu
[FunctionName("Example")]
public static async Task Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
Task t1 = context.CallActivityAsync<int>("MyActivity", 1);
Task t2 = context.CallActivityAsync<int>("MyActivity", 2);
await Task.WhenAll(t1, t2);
}
using Microsoft.DurableTask;
public class Example : TaskOrchestrator<object?, object?>
{
public override async Task<object?> RunAsync(TaskOrchestrationContext context, object? input)
{
Task t1 = context.CallActivityAsync("MyActivity", 1);
Task t2 = context.CallActivityAsync("MyActivity", 2);
await Task.WhenAll(t1, t2);
return null;
}
}
Po zahájení této orchestrace klientem ji aplikace zpracuje jako posloupnost pracovních položek. Každá dokončená pracovní položka aktualizuje stav uzlu úloh po potvrzení. Postupujte takto:
Klient požádá o spuštění nové orchestrace s ID instance 123. Po dokončení tohoto požadavku obsahuje centrum úloh zástupný symbol pro stav orchestrace a zprávu instance:
Popisek
je jedním z mnoha typů historických událostí , které identifikují různé typy zpráv a událostí účastnících se v historii orchestrace. Pracovní proces spustí pracovní položku orchestrátoru
ExecutionStarted, která zprávu zpracuje. Volá funkci orchestrátoru, která spustí kód orchestrace. Tento kód naplánuje dvě aktivity a po čekání na výsledky se zastaví.
Stav runtime je nyní
Runninga historie zaznamenává tuto první epizodu: orchestrátor byl spuštěn, zahájeno zpracování, byly naplánovány dva úkoly a orchestrátor dokončil epizodu.Pracovník provede pracovní položku aktivity pro zpracování jedné ze
TaskScheduledzpráv. Volá funkci aktivity se vstupem "2". Po dokončení funkce aktivity se vytvoříTaskCompletedzpráva obsahující výsledek.
Pracovní proces spustí pracovní položku orchestrátoru
TaskCompleted, která zprávu zpracuje. Pokud je orchestrace stále uložená v mezipaměti, může pokračovat v provádění. Jinak pracovník nejprve projde historií, aby obnovil aktuální stav orchestrace. Potom pokračuje v orchestraci a poskytuje výsledek aktivity. Po přijetí tohoto výsledku orchestrace stále čeká na výsledek jiné aktivity, takže se zase přestane spouštět.
Historie zaznamenává druhou epizodu: úkol byl dokončen a orchestrátor byl znovu pozastaven.
Pracovník provede pracovní položku aktivity, která zpracuje zbývající
TaskScheduledzprávu. Volá funkci aktivity se vstupem "1".
Pracovník provede další orchestrační pracovní položku, aby zpracoval
TaskCompletedzprávu. Po přijetí tohoto druhého výsledku se orchestrace dokončí.
Stav modulu runtime je nyní
Completeda historie zaznamenává třetí a poslední epizodu: druhý úkol byl dokončen a provádění bylo dokončeno.
Poznámka:
Zobrazený plán není jediným možným plánem. Pokud se například druhá aktivita dokončí dříve, mohou být obě TaskCompleted zprávy zpracovány jednou pracovní položkou, což vede k pouze dvěma epizodám místo tří.
Reprezentace v úložišti
Každý poskytovatel úložiště používá k reprezentaci center úloh v úložišti jinou interní organizaci. Pochopení této organizace, i když není potřeba, může pomoct při řešení potíží nebo při pokusu o splnění cílů výkonu, škálovatelnosti nebo nákladů.
Sady SDK trvalých úloh používají jako back-end plánovač úloh , který interně spravuje stav centra úloh.
Poskytovatel plánovače trvalých úloh
Durable Task Scheduler je plně spravovaný poskytovatel back-endu, který ukládá všechny stavy centra úloh interně. Na rozdíl od poskytovatelů úložiště typu přineste si vlastní (BYO) nemusíte spravovat ani nastavovat žádnou podkladovou infrastrukturu úložiště. Každý prostředek plánovače (Microsoft.DurableTask/schedulers) má vyhrazené výpočetní a paměťové prostředky a může obsahovat jedno nebo více center úloh (Microsoft.DurableTask/schedulers/taskHubs).
Vzhledem k tomu, že Plánovač trvalých úloh spravuje úložiště interně, nemůžete přímo zkontrolovat podkladová data. Místo toho použijte řídicí panel plánovače úloh Durable ke sledování a dotazování instancí orchestrace.
Další informace o možnostech poskytovatele úložiště BYO a jejich porovnání najdete v tématu Durable Functions poskytovatelé úložiště.
poskytovatel úložiště Azure
Zprostředkovatel Azure Storage představuje centrum úloh v úložišti pomocí následujících komponent:
- Dvě tabulky Azure ukládají stavy instancí.
- Jedna fronta Azure ukládá zprávy o aktivitách.
- Jedna nebo více front Azure ukládá zprávy instancí. Každá z těchto takzvaných ovládacích front představuje oddíl, který je přiřazen k podmnožině všech instančních zpráv na základě hash hodnoty ID instance.
- Několik dalších kontejnerů objektů blob, které se používají pro pronájem objektů blob nebo velkých zpráv.
Například centrum úloh pojmenované xyz s PartitionCount = 4 obsahuje následující fronty a tabulky:
Následující části popisují tyto komponenty a jejich role podrobněji.
Další informace o tom, jak jsou centra úloh reprezentována poskytovatelem Azure Storage, najdete v dokumentaci k poskytovateli Azure Storage.
Zprostředkovatel úložiště Netherite (cesta vyřazení)
Netherite rozděluje všechny stavy centra úloh do zadaného počtu oddílů. V úložišti ukládají tyto prostředky data:
- Jeden Azure Storage kontejner objektů blob, který obsahuje všechny objekty blob seskupené podle oddílu.
- Jedna tabulka Azure, která obsahuje publikované metriky o oddílech.
- Obor názvů Azure Event Hubs sloužící k doručování zpráv mezi oddíly.
Například centrum úloh s názvem mytaskhub a PartitionCount = 32 je reprezentováno v úložišti následujícím způsobem:
Poznámka:
Veškerý stav rozbočovače úloh je uložen uvnitř kontejneru objektů blob x-storage. Tabulka DurableTaskPartitions a obor názvů služby Event Hubs obsahují redundantní data: pokud dojde ke ztrátě jejich obsahu, je možné je automaticky obnovit. Proto nemusíte konfigurovat obor názvů Azure Event Hubs tak, aby se zprávy uchovály po výchozí době vypršení platnosti.
Netherite používá mechanismus správy událostí (event sourcing), který je založený na záznamovém protokolu a kontrolních bodech, k reprezentaci aktuálního stavu oddílu. Objekty blob bloku i objekty blob stránky ukládají data. Tento formát nemůžete číst přímo z úložiště, takže aplikace funkcí musí být spuštěná při dotazování úložiště instancí.
Další informace o centrech úloh pro poskytovatele úložiště Netherite najdete v tématu Informace o centru úloh pro poskytovatele úložiště Netherite.
Poskytovatel úložiště MSSQL
Všechna data centra úloh jsou uložená v jedné relační databázi pomocí těchto tabulek:
- V tabulkách jsou
dt.Instancesdt.Historyuložené stavy instancí. - Tabulka
dt.NewEventsukládá zprávy instance. - Tabulka
dt.NewTasksukládá zprávy o aktivitách.
Pokud chcete povolit, aby mohlo několik rozbočovačů úloh nezávisle spoluexistovat v téže databázi, každá tabulka obsahuje TaskHub sloupec jako součást primárního klíče. Na rozdíl od ostatních dvou poskytovatelů nemá poskytovatel MSSQL oddíly.
Další informace o centrech úloh pro zprostředkovatele úložiště MSSQL najdete v tématu Informace o centru úloh pro poskytovatele úložiště Microsoft SQL (MSSQL).