Implementera Microsoft Fabric-serverdelen
Den här exempellagringsplatsen för Microsoft Fabric-arbetsbelastningsutveckling är en startpunkt för att skapa program som kräver integrering med olika tjänster och för integrering med lakehouse-arkitektur. Den här artikeln hjälper dig att konfigurera miljön och konfigurera nödvändiga komponenter för att komma igång. Artikeln beskriver viktiga komponenter och deras roller i arkitekturen.
Klientdel
Klientdelen är där du hanterar användarupplevelsen (UX) och beteendet. Den kommunicerar med fabric-klientdelsportalen via en iFrame för att underlätta sömlös interaktion.
Mer information finns i Microsoft Fabric Workload Development Kit-klientdelen.
Serverdel
Serverdelen lagrar både data och metadata. Den använder CRUD-åtgärder (Create, Read, Update och Delete) för att skapa arbetsbelastningsobjekt och metadata och kör jobb för att fylla i data i lagringen. Kommunikationen mellan klientdelen och serverdelen upprättas via offentliga API:er.
Azure Relay och DevGateway
Azure Relay möjliggör kommunikation mellan den lokala utvecklingsmiljön och fabric-serverdelen i utvecklarläge. I utvecklarläge fungerar arbetsbelastningen på utvecklarens dator.
DevGateway-verktyget har två roller:
- Den hanterar arbetsbelastningens sida av Azure Relay-kanalen och hanterar registreringen av den lokala arbetsbelastningsinstansen med Fabric i kontexten för en specifik arbetsyta. Verktyget hanterar avregistrering när kanalen kopplas från.
- Det fungerar med Azure Relay för att kanalisera arbetsbelastnings-API-anrop från Infrastruktur till arbetsbelastningen.
API-anrop för arbetsbelastningskontroll görs direkt från arbetsbelastningen till Infrastrukturresurser. Azure Relay-kanalen krävs inte för anropen.
Lakehouse-integrering
Arkitekturen för arbetsbelastningsutvecklingspaket integreras sömlöst med en lakehouse-arkitektur för åtgärder som att spara, läsa och hämta data. Interaktionen underlättas via Azure Relay och Fabric SDK för att säkerställa säker och autentiserad kommunikation. Mer information finns i Arbeta med kunddata.
Autentisering och säkerhet
Microsoft Entra-ID används för säker autentisering, vilket säkerställer att alla interaktioner inom arkitekturen är auktoriserade och säkra.
Översikten över utvecklingspaketet ger en inblick i vår arkitektur. Mer information om hur projekt konfigureras, riktlinjer för autentisering och för att komma igång finns i följande artiklar:
Översikt över arkitekturen för autentisering av arbetsbelastningar
Implementeringsguide för autentisering av arbetsbelastningar
Klientdelen upprättar kommunikation med fabric-klientdelsportalen via en iFrame. Portalen interagerar i sin tur med infrastrukturresursens serverdel genom att göra anrop till dess exponerade offentliga API:er.
För interaktioner mellan backend development box och Fabric-serverdelen fungerar Azure Relay som en kanal. Dessutom integreras backend-utvecklingslådan sömlöst med Lakehouse. Kommunikationen underlättas med hjälp av Azure Relay och Fabric Software Development Kit (SDK) som är installerat på serverdelsutvecklingsrutan.
Autentiseringen för all kommunikation inom dessa komponenter säkerställs via Microsoft Entra. Microsoft Entra tillhandahåller en säker och autentiserad miljö för interaktioner mellan klientdelen, serverdelen, Azure Relay, Fabric SDK och Lakehouse.
Förutsättningar
- .NET 7.0 SDK
- Visual Studio 2022
Se till att NuGet Package Manager är integrerat i Visual Studio-installationen. Det här verktyget krävs för effektiv hantering av externa bibliotek och paket som är nödvändiga för vårt projekt.
NuGet-pakethantering
<NuspecFile>Packages\manifest\ManifestPackageDebug.nuspec</NuspecFile>
och<NuspecFile>Packages\manifest\ManifestPackageRelease.nuspec</NuspecFile>
: Dessa egenskaper anger sökvägen till De NuSpec-filer som används för att skapa NuGet-paketet för felsöknings- och versionslägen. NuSpec-filen innehåller metadata om paketet, till exempel dess ID, version, beroenden och annan relevant information.<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
: När den här egenskapen är inställdtrue
på instrueras byggprocessen att automatiskt generera ett NuGet-paket under varje version. Den här egenskapen är användbar för att säkerställa att paketet alltid är uppdaterat med de senaste ändringarna i projektet.<IsPackable>true</IsPackable>
: När värdet ärtrue
anger den här egenskapen att projektet kan paketeras i ett NuGet-paket. Att vara packbar är en viktig egenskap för projekt som är avsedda att producera NuGet-paket under byggprocessen.
Det genererade NuGet-paketet för felsökningsläge finns i katalogen src\bin\Debug efter byggprocessen.
När du arbetar i molnläge kan du ändra Visual Studio-byggkonfigurationen till Att släppa och skapa ditt paket. Det genererade paketet finns i src\bin\Release
katalogen. Mer information finns i Guiden Arbeta i molnläge.
Beroenden
Exempel på serverdels-Boilerplate beror på följande Azure SDK-paket:
- Azure.Core
- Azure.Identity
- Azure.Storage.Files.DataLake
- Microsoft Identity-paketet
Om du vill konfigurera NuGet Package Manager anger du sökvägen i avsnittet Paketkällor innan du påbörjar byggprocessen.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<BuildDependsOn>PreBuild</BuildDependsOn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<IsPackable>true</IsPackable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<NuspecFile>Packages\manifest\ManifestPackageRelease.nuspec</NuspecFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
<NuspecFile>Packages\manifest\ManifestPackageDebug.nuspec</NuspecFile>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Azure.Core" Version="1.38.0" />
<PackageReference Include="Azure.Identity" Version="1.11.0" />
<PackageReference Include="Azure.Storage.Files.DataLake" Version="12.14.0" />
<PackageReference Include="Microsoft.AspNet.WebApi.Client" Version="5.2.9" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="7.0.5" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.60.3" />
<PackageReference Include="Microsoft.IdentityModel.Protocols" Version="6.30.1" />
<PackageReference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="6.30.1" />
<PackageReference Include="Microsoft.IdentityModel.Tokens" Version="6.30.1" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="Properties\ServiceDependencies\" />
</ItemGroup>
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">
<Exec Command="powershell.exe -ExecutionPolicy Bypass -File ValidationScripts\RemoveErrorFile.ps1 -outputDirectory ValidationScripts\" />
<Exec Command="powershell.exe -ExecutionPolicy Bypass -File ValidationScripts\ManifestValidator.ps1 -inputDirectory .\Packages\manifest\ -inputXml WorkloadManifest.xml -inputXsd WorkloadDefinition.xsd -outputDirectory ValidationScripts\" />
<Exec Command="powershell.exe -ExecutionPolicy Bypass -File ValidationScripts\ItemManifestValidator.ps1 -inputDirectory .\Packages\manifest\ -inputXsd ItemDefinition.xsd -outputDirectory ValidationScripts\" />
<Exec Command="powershell.exe -ExecutionPolicy Bypass -File ValidationScripts\ValidateNoDefaults.ps1 -outputDirectory ValidationScripts\" />
<Error Condition="Exists('ValidationScripts\ValidationErrors.txt')" Text="Validation errors with either manifests or default values" File="ValidationScripts\ValidationErrors.txt" />
</Target>
</Project>
Kom igång
Så här konfigurerar du arbetsbelastningsexempelprojektet på den lokala datorn:
Klona lagringsplatsen: Kör
git clone https://github.com/microsoft/Microsoft-Fabric-workload-development-sample.git
.Öppna lösningen i Visual Studio 2022.
Konfigurera en appregistrering genom att följa anvisningarna i autentiseringsguiden. Se till att både klientdels- och serverdelsprojekten har den konfiguration som beskrivs i artikeln. Microsoft Entra används för säker autentisering för att säkerställa att alla interaktioner inom arkitekturen är auktoriserade och säkra.
Uppdatera Microsoft OneLake DFS-bas-URL:en. Beroende på din Infrastrukturmiljö kanske du kan uppdatera värdet för
OneLakeDFSBaseURL
i mappen src\Constants . Standardvärdet äronelake.dfs.fabric.microsoft.com
, men du kan uppdatera URL:en så att den återspeglar din miljö. Mer information om DFS-sökvägar finns i OneLake-dokumentationen.Konfigurera arbetsbelastningskonfigurationen.
- Kopiera workload-dev-mode.json från src/Config till C:.
- I filen workload-dev-mode.json uppdaterar du följande fält så att de matchar konfigurationen:
-
WorkspaceGuid: Ditt arbetsyte-ID. Du hittar det här värdet i webbläsarens URL när du väljer en arbetsyta i Infrastrukturresurser. Exempel:
https://app.powerbi.com/groups/<WorkspaceID>/
- ManifestPackageFilePath: Platsen för manifestpaketet. När du skapar lösningen sparas manifestpaketet i src\bin\Debug. Mer information om manifestpaketet finns senare i artikeln.
- WorkloadEndpointURL: Arbetsbelastningens slutpunkts-URL.
-
WorkspaceGuid: Ditt arbetsyte-ID. Du hittar det här värdet i webbläsarens URL när du väljer en arbetsyta i Infrastrukturresurser. Exempel:
-
I filen Packages/manifest/WorkloadManifest.xml uppdaterar du följande fält så att de matchar konfigurationen:
-
<AppId>
: Klient-ID (program-ID) för arbetsbelastningen Microsoft Entra-programmet. -
<RedirectUri>
: Omdirigerings-URI:er. Du hittar det här värdet i appregistreringen som du skapade under Autentisering. -
<ResourceId>
: Målgruppen för inkommande Microsoft Entra-token. Du hittar den här informationen i appregistreringen som du skapade under Exponera ett API.
-
-
I filen src/appsettings.json uppdaterar du följande fält så att de matchar konfigurationen:
- PublisherTenantId: ID för arbetsbelastningsutgivarens klientorganisation.
- ClientId: Klient-ID (program-ID) för arbetsbelastningen Microsoft Entra-programmet.
- ClientSecret: Hemligheten för arbetsbelastningens Microsoft Entra-program.
- Målgrupp: Målgruppen för inkommande Microsoft Entra-token. Du hittar den här informationen i appregistreringen som du skapade under Exponera ett API. Den här inställningen kallas även program-ID URI.
Generera ett manifestpaket.
Skapa en manifestpaketfil genom att skapa Fabric_Extension_BE_Boilerplate. Bygget är en process i tre steg som genererar manifestpaketfilen. Den kör följande steg:
- Utlöser ManifestValidator.ps1 på WorkloadManifest.xml i Packages\manifest/ och utlöser ItemManifestValidator.ps1 på alla objekt XMLs (till exempel Item1.xml) i Packages\manifest/. Om verifieringen misslyckas genereras en felfil. Du kan visa valideringsskripten i ValidationScripts/.
- Om det finns en felfil misslyckas bygget med felet Valideringsfel med antingen manifest eller standardvärden. Om du vill se felfilen i Visual Studio dubbelklickar du på felet i valideringsresultatet.
- Efter valideringen paketerar du filerna WorkloadManifest.xml och Item1.xml till ManifestPackage.1.0.0.nupkg. Det resulterande paketet finns i src\bin\Debug.
Kopiera filen ManifestPackage.1.0.0.nupkg till sökvägen som definieras i konfigurationsfilen workload-dev-mode.json.
Program.cs är startpunkten och startskriptet för ditt program. I den här filen kan du konfigurera olika tjänster, initiera programmet och starta webbvärden.
Skapa för att säkerställa att projektet kan komma åt de nödvändiga beroendena för kompilering och körning.
Ladda ned DevGateway från Microsofts Download Center
Kör Microsoft.Fabric.Workload.DevGateway.exe-programmet och logga in med en användare som har administratörsbehörighet för arbetsytan som anges i
WorkspaceGuid
fältet workload-dev-mode.json.Efter autentisering upprättar externa arbetsbelastningar kommunikation med Fabric-serverdelen via Azure Relay. Den här processen omfattar hantering av vidarebefordran av registrering och kommunikation som underlättas av en utsedd proxynod. Paketet som innehåller arbetsbelastningsmanifestet laddas upp och publiceras.
I det här skedet identifierar Fabric arbetsbelastningen och införlivar sin allokerade kapacitet.
Du kan övervaka potentiella fel i konsolen.
Om inga fel visas upprättas anslutningen, registreringen körs och arbetsbelastningsmanifestet laddas upp systematiskt.
I Visual Studio ändrar du startprojektet till Boilerplate-projektet och väljer Kör.
Arbeta med exempelprojektet Boilerplate
Kodgenerering
Vi använder arbetsbelastningen Boilerplate C# ASP.NET Core-exempel för att visa hur du skapar en arbetsbelastning med hjälp av REST-API:er. Exemplet börjar med att generera serverstubbar och kontraktsklasser baserat på arbetsbelastnings-API Swagger-specifikationen. Du kan generera koden med hjälp av något av flera Swagger-kodgenereringsverktyg. Exempel på boilerplate använder NSwag. Exemplet innehåller kommandoradsskriptet GenerateServerStub.cmd , som omsluter NSwag-kodgeneratorn. Skriptet tar en enda parameter, vilket är en fullständig sökväg till NSwag-installationskatalogen. Den söker också efter Swagger-definitionsfilen (swagger.json) och konfigurationsfilen (nswag.json) i mappen.
Om du kör det här skriptet skapas en C#-fil med namnet WorkloadAPI_Generated.cs. Innehållet i den här filen kan delas in logiskt i tre delar enligt beskrivningen i nästa avsnitt.
ASP.NET Core stub-styrenheter
ItemLifecycleController
och JobsController
klasser är tunna implementeringar av ASP.NET Core-styrenheter för två delmängder av arbetsbelastnings-API:et: livscykelhantering och jobb för objekt. Dessa klasser ansluter till HTTP-pipelinen ASP.NET Core. De fungerar som startpunkter för DE API-metoder som definieras i Swagger-specifikationen. Klasserna vidarebefordrar anropen till den "verkliga" implementeringen som tillhandahålls av arbetsbelastningen.
Här är ett exempel på CreateItem
metoden:
/// <summary>
/// Called by Microsoft Fabric for creating a new item.
/// </summary>
/// <remarks>
/// Upon item creation Fabric performs some basic validations, creates the item with 'provisioning' state and calls this API to notify the workload. The workload is expected to perform required validations, store the item metadata, allocate required resources, and update the Fabric item metadata cache with item relations and ETag. To learn more see [Microsoft Fabric item update flow](https://updateflow).
/// <br/>
/// <br/>This API should accept [SubjectAndApp authentication](https://subjectandappauthentication).
/// <br/>
/// <br/>##Permissions
/// <br/>Permissions are checked by Microsoft Fabric.
/// </remarks>
/// <param name="workspaceId">The workspace ID.</param>
/// <param name="itemType">The item type.</param>
/// <param name="itemId">The item ID.</param>
/// <param name="createItemRequest">The item creation request.</param>
/// <returns>Successfully created.</returns>
[Microsoft.AspNetCore.Mvc.HttpPost, Microsoft.AspNetCore.Mvc.Route("workspaces/{workspaceId}/items/{itemType}/{itemId}")]
public System.Threading.Tasks.Task CreateItem(System.Guid workspaceId, string itemType, System.Guid itemId, [Microsoft.AspNetCore.Mvc.FromBody] CreateItemRequest createItemRequest)
{
return _implementation.CreateItemAsync(workspaceId, itemType, itemId, createItemRequest);
}
Gränssnitt för arbetsbelastningsimplementering
IItemLifecycleController
och IJobsController
är gränssnitt för de tidigare nämnda "verkliga" implementeringarna. De definierar samma metoder som kontrollanterna implementerar.
Definition av kontraktsklasser
C#-kontraktsklasser är klasser som API:erna använder.
Implementering
Nästa steg när du har genererat kod är att implementera gränssnitten IItemLifecycleController
och IJobsController
. I exempelrutan ItemLifecycleControllerImpl
Boilerplate och JobsControllerImpl
implementera dessa gränssnitt.
Den här koden är till exempel implementeringen av CreateItem-API:et:
/// <inheritdoc/>
public async Task CreateItemAsync(Guid workspaceId, string itemType, Guid itemId, CreateItemRequest createItemRequest)
{
var authorizationContext = await _authenticationService.AuthenticateControlPlaneCall(_httpContextAccessor.HttpContext);
var item = _itemFactory.CreateItem(itemType, authorizationContext);
await item.Create(workspaceId, itemId, createItemRequest);
}
Hantera en artikelnyttolast
Flera API-metoder accepterar olika typer av "nyttolast" som en del av begärandetexten, eller så returnerar de nyttolaster som en del av svaret. Till CreateItemRequest
exempel har egenskapen creationPayload
.
"CreateItemRequest": {
"description": "Create item request content.",
"type": "object",
"additionalProperties": false,
"required": [ "displayName" ],
"properties": {
"displayName": {
"description": "The item display name.",
"type": "string",
"readOnly": false
},
"description": {
"description": "The item description.",
"type": "string",
"readOnly": false
},
"creationPayload": {
"description": "Creation payload specific to the workload and item type, passed by the item editor or as Fabric Automation API parameter.",
"$ref": "#/definitions/CreateItemPayload",
"readOnly": false
}
}
}
Typerna för dessa nyttolastegenskaper definieras i Swagger-specifikationen. Det finns en dedikerad typ för alla typer av nyttolaster. Dessa typer definierar inte några specifika egenskaper, och de tillåter att någon egenskap inkluderas.
Här är ett exempel på typen CreateItemPayload
:
"CreateItemPayload": {
"description": "Creation payload specific to the workload and item type.",
"type": "object",
"additionalProperties": true
}
De genererade C#-kontraktsklasserna definieras som partial
. De har en ordlista med definierade egenskaper.
Här är ett exempel:
/// <summary>
/// Creation payload specific to the workload and item type.
/// </summary>
[System.CodeDom.Compiler.GeneratedCode("NJsonSchema", "13.20.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v13.0.0.0))")]
public partial class CreateItemPayload
{
private System.Collections.Generic.IDictionary<string, object> _additionalProperties;
[Newtonsoft.Json.JsonExtensionData]
public System.Collections.Generic.IDictionary<string, object> AdditionalProperties
{
get { return _additionalProperties ?? (_additionalProperties = new System.Collections.Generic.Dictionary<string, object>()); }
set { _additionalProperties = value; }
}
}
Koden kan använda den här ordlistan för att läsa och returnera egenskaper. En bättre metod är dock att definiera specifika egenskaper med hjälp av motsvarande typer och namn. Du kan använda deklarationen partial
för de genererade klasserna för att effektivt definiera egenskaper.
Filen CreateItemPayload.cs innehåller till exempel en kompletterande definition för CreateItemPayload
klassen.
I det här exemplet lägger definitionen till Item1Metadata
egenskapen:
namespace Fabric_Extension_BE_Boilerplate.Contracts.FabricAPI.Workload
{
/// <summary>
/// Extend the generated class by adding item-type-specific fields.
/// In this sample every type will have a dedicated property. Alternatively, polymorphic serialization could be used.
/// </summary>
public partial class CreateItemPayload
{
[Newtonsoft.Json.JsonProperty("item1Metadata", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public Item1Metadata Item1Metadata { get; init; }
}
}
Men om arbetsbelastningen stöder flera objekttyper CreateItemPayload
måste klassen kunna hantera olika typer av nyttolast för skapande med en per objekttyp. Du har två alternativ. Det enklare sättet, som används i exempelexemplet boilerplate, är att definiera flera valfria egenskaper som var och en representerar nyttolasten för skapande för en annan objekttyp. Varje begäran har sedan bara en av dessa uppsättningar egenskaper, beroende på vilken objekttyp som skapas. Du kan också implementera polymorf serialisering, men det här alternativet visas inte i exemplet eftersom alternativet inte ger några betydande fördelar.
Om du till exempel vill ha stöd för två objekttyper måste klassdefinitionen utökas som i följande exempel:
namespace Fabric_Extension_BE_Boilerplate.Contracts.FabricAPI.Workload
{
public partial class CreateItemPayload
{
[Newtonsoft.Json.JsonProperty("item1Metadata", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public Item1Metadata Item1Metadata { get; init; }
[Newtonsoft.Json.JsonProperty("item2Metadata", Required = Newtonsoft.Json.Required.Default, NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore)]
public Item2Metadata Item2Metadata { get; init; }
}
}
Kommentar
Nyttolasten som skickas till arbetsbelastningen genereras av klienten. Det kan vara objektredigeraren iFrame eller FABRIC Automation REST API. Klienten ansvarar för att skicka rätt nyttolast och matcha objekttypen. Arbetsbelastningen ansvarar för verifieringen. Fabric behandlar den här nyttolasten som ett ogenomskinliga objekt och överför den bara från klienten till arbetsbelastningen. På samma sätt är det arbetsbelastningens och klientens ansvar att hantera nyttolasten korrekt för en nyttolast som returneras av arbetsbelastningen till klienten.
Den här koden visar till exempel hur exempelobjekt1-implementeringen av Boilerplate hanterar nyttolasten:
protected override void SetDefinition(CreateItemPayload payload)
{
if (payload == null)
{
Logger.LogInformation("No payload is provided for {0}, objectId={1}", ItemType, ItemObjectId);
_metadata = Item1Metadata.Default.Clone();
return;
}
if (payload.Item1Metadata == null)
{
throw new InvalidItemPayloadException(ItemType, ItemObjectId);
}
if (payload.Item1Metadata.Lakehouse == null)
{
throw new InvalidItemPayloadException(ItemType, ItemObjectId)
.WithDetail(ErrorCodes.ItemPayload.MissingLakehouseReference, "Missing Lakehouse reference");
}
_metadata = payload.Item1Metadata.Clone();
}
Felsöka och felsöka
I nästa avsnitt beskrivs hur du felsöker och felsöker distributionen.
Kända problem och lösningar
Få information om kända problem och sätt att lösa dem.
Klienthemlighet saknas
Fel:
Microsoft.Identity.Client.MsalServiceException: Ett konfigurationsproblem förhindrar autentisering. Mer information finns i felmeddelandet från servern. Du kan ändra konfigurationen i programregistreringsportalen. Mer https://aka.ms/msal-net-invalid-client
information finns i.
Ursprungligt undantag: AADSTS7000215: En ogiltig klienthemlighet angavs. Kontrollera att hemligheten som skickas i begäran är värdet för klienthemligheten och inte klienthemlighets-ID:t för en hemlighet som läggs till i appinställningen app_guid
.
Lösning: Kontrollera att du har rätt klienthemlighet definierad i appsettings.json.
Fel vid skapande av objekt på grund av saknat administratörsmedgivande
Fel:
Microsoft.Identity.Client.MsalUiRequiredException: AADSTS65001: Användaren eller administratören har inte samtyckt till att använda programmet med ID <example ID>
. Skicka en interaktiv auktoriseringsbegäran för den här användaren och resursen.
Lösning:
I objektredigeraren går du till botten av smärtan och väljer Navigera till autentiseringssidan.
Under Omfång anger du .default och väljer sedan Hämta åtkomsttoken.
Godkänn revisionen i dialogrutan.
Det går inte att skapa objekt på grund av val av kapacitet
Fel:
PriorityPlacement: Inga kärntjänster är tillgängliga för prioritetsplacering. Endast name
, guid
och workload-name
är tillgängliga.
Lösning:
Som användare kanske du bara har åtkomst till utvärderingskapacitet. Kontrollera att du använder en kapacitet som du har åtkomst till.
Filskapandefel med 404-fel (NotFound)
Fel:
Det gick inte att skapa en ny fil för filePath: 'workspace-id'/'lakehouse-id'/Files/data.json. Svarsstatuskoden indikerar inte framgång: 404 (NotFound).
Lösning:
Se till att du arbetar med OneLake DFS-URL:en som passar din miljö. Om du till exempel arbetar med en PPE-miljö ändrar du EnvironmentConstants.OneLakeDFSBaseUrl
i Constants.cs till lämplig URL.
Felsöka
När du felsöker olika åtgärder kan du ange brytpunkter i koden för att analysera och felsöka beteendet. Följ dessa steg för effektiv felsökning:
- Öppna koden i utvecklingsmiljön.
- Gå till den relevanta åtgärdshanterarfunktionen (till exempel
OnCreateFabricItemAsync
för CRUD-åtgärder eller en slutpunkt i en kontrollant förexecute
åtgärder). - Placera brytpunkter på specifika rader där du vill inspektera koden.
- Kör programmet i felsökningsläge.
- Utlös åtgärden från klientdelen som du vill felsöka.
Felsökningsprogrammet pausar körningen vid de angivna brytpunkterna så att du kan undersöka variabler, gå igenom koden och identifiera problem.
Arbetsyta
Om du ansluter en serverdel till exempelarbetsbelastningsprojektet måste objektet tillhöra en arbetsyta som är associerad med en kapacitet. Som standard är arbetsytan Min arbetsyta inte associerad med en kapacitet. Annars kan du få felet som visas på följande skärmbild:
Växla till en namngiven arbetsyta. Lämna standardnamnet för arbetsytan Min arbetsyta.
Från rätt arbetsyta läser du in exempelarbetsbelastningen och fortsätter med testerna:
Bidra
Vi välkomnar bidrag till detta projekt. Om du hittar några problem eller vill lägga till nya funktioner följer du dessa steg:
- Förgrena lagringsplatsen.
- Skapa en ny gren för din funktion eller felkorrigering.
- Gör dina ändringar och checka sedan in dem.
- Skicka ändringarna till din förgrenade lagringsplats.
- Skapa en pull-begäran som har en tydlig beskrivning av dina ändringar.