巡覽Hello World自訂資源提供者範例
適用于:Windows Azure Pack
Windows Azure Pack for Windows Server Developer Kit 中會提供範例自訂資源提供者。 如需詳細資訊,請參閱https://www.microsoft.com/en-us/download/details.aspx?id=41146。
Hello World範例同時提供租使用者使用者介面擴充功能和必要端點實作之系統管理員和管理入口網站的管理入口網站。 作為以 MVC ASP.NET 網站為基礎的範例,控制器會提供端點定義,以允許存取資源提供者資源。 它們也會用來代表管理入口網站使用者介面呼叫服務管理 API。 自訂資源提供者管理入口網站系統管理員使用者介面延伸模組會以檢視表示。
使用者介面擴充功能和控制器
範例使用者介面會為系統管理員提供管理入口網站的延伸模組,以及租使用者的管理入口網站。 用戶端 JavaScript 型使用者介面可透過 Internet Explorer 取得。 範例專案如下:
專案 |
描述 |
Microsoft.WAP.Samples.HelloWorld.AdminExtension |
系統管理員延伸模組的管理入口網站 |
Microsoft.WAP.Samples.HelloWorld.TenantExtension |
租使用者延伸模組的管理入口網站 |
如需如何建立用戶端使用者介面的詳細資訊,請參閱Windows Azure Pack Management Portal 使用者介面擴充功能。
在這些專案中,伺服器端 MVC 控制器會用來與服務管理 API 互動。 控制器來源檔案為
檔案 |
描述 |
---|---|
HelloWorldAdminController.cs |
提供資源提供者系統管理員端點、AdminSettingsController.cs 和其他 Microsoft.WAP.Samples.HelloWorld.API 中其他人的存取權。 |
HelloWorldTenantController.cs |
在 Microsoft.WAP.Samples.HelloWorld.API 中提供資源提供者租使用者端點 FileShareController.cs 的存取權。 |
這兩個控制器在 Microsoft.WAP.Samples.HelloWorld.APIClient 中使用 HelloWorldClient.cs,透過服務管理 API 將呼叫路由傳送至Hello World自訂資源提供者。
資源提供者端點實作
這四個 REST 端點會實作為Hello World範例專案 Microsoft.WAP.HelloWorld.API 中的伺服器端控制器。 有 7 個控制器代表系統管理員和租使用者端點。 FileShareController.cs 代表租使用者端點,而其他端點則代表系統管理員端點。
追蹤資源提供者端點的使用者擴充功能呼叫Client-Side
用戶端管理入口網站使用者活動導致呼叫其中一個資源提供者端點的程式如下。 在此範例中,租使用者會針對租使用者使用者介面延伸模組使用自訂管理入口網站來快速建立檔案共用。
租使用者選擇快速建立檔案共用。 已處理用戶端 In HelloWorldTenantController.js這會導致 REST 呼叫伺服器端至 HelloWorldTenantController.cs 中的CreateFileShare
public JsonResult CreateFileShare(string subscriptionId, FileShareModel fileShareToCreate) { this.apiClient.CreateFileShare(subscriptionId, fileShareToCreate.ToApiObject()); return this.Json(fileShareToCreate); }
CreateFileShare 會在 HelloWorldClient.cs 中定義的 API 用戶端協助程式類別中呼叫 CreateFileShare—Microsoft.WAP.Samples.HelloWorld.APIClient。 此函式會在Hello World資源提供者上建置建立檔案共用租使用者 REST API 呼叫的 URI,並透過服務管理 API 進行呼叫。
public void CreateFileShare(string subscriptionId, FileShare fileShareNameToCreate) { var requestUrl = this.CreateRequestUri(string.Format(CultureInfo.InvariantCulture, HelloWorldClient.FileShares, subscriptionId)); this.Post<FileShare>(requestUrl, fileShareNameToCreate); }
檔案共用 REST 呼叫的相對路徑定義于 HelloWorldClient.FileShares 中。 所有系統管理員和租使用者相對路徑的定義都位於 HelloWorldClient.cs 中。
若要建置完整的 URI,CreateRequestUri (HelloWorldClient) 也需要從 BaseEndpoint 取得的服務管理 API 端點。
private Uri CreateRequestUri(string relativePath, string queryString = "") { var endpoint = new Uri(this.BaseEndpoint, relativePath); var uriBuilder = new UriBuilder(endpoint); uriBuilder.Query = queryString; return uriBuilder.Uri; }
BaseEndpoint 是在 HelloWorldClient 類別建構函式中指派,此建構函式是在 HelloWorldTenantController 類別建構函式中建立的。 rdfeEndpoint 是服務管理 API 端點。
public HelloWorldTenantController() { // var rdfeEndpoint = new Uri(AppManagementConfiguration.Instance.RdfeUnifiedManagementServiceUri); var handler = new BearerMessageProcessingHandler(); this.apiClient = new HelloWorldClient(rdfeEndpoint, handler); }
呼叫這個 。在 CreateFileShare (HelloWorldClient.cs 中張貼,) 將 REST 呼叫與隨附的檔案共用要求本文一起傳送至服務管理 API,以將呼叫路由傳送至自訂資源提供者Hello World。
hello world 自訂提供者租使用者端點會在 FileShareController.cs 中接收建立檔案共用呼叫,並執行適當的動作。
[HttpPost] public void CreateFileShare(FileShare fileShare) { fileShares.Add(new FileShare { Id = fileShares.Count, FileServerName = fileShare.FileServerName, Name = fileShare.Name, SubscriptionId = fileShare.SubscriptionId, Size = fileShare.Size }; }
註冊Hello World資源提供者
hello world 範例專案 Microsoft.WAP.Samples.HelloWorld.Setup 提供客戶提供者的安裝程式和註冊。 本文記載于部署 Windows Azure Pack Management Portal 擴充功能。 特別與註冊自訂資源提供者相關的是向 azure Pack Windows註冊端點。 hello world 範例會使用Windows PowerShell腳本 (Register-ResourceProvider.ps1) 來註冊自訂資源提供者端點。 這可讓Windows Azure Pack 提供必要的資訊,以便透過服務管理 API 正確地將 REST 呼叫傳遞至Hello World自訂資源提供者。 在腳本中,Windows Azure Pack PowerShell Cmdlet 執行註冊。 rpSettings 參數會提供用來註冊端點和其他組態資訊的必要端點資訊。
$rpSettings = @{
'Name' = $rpName;
'DisplayName' = 'Hello World';
'InstanceDisplayName' = 'Hello World';
'AdminForwardingAddress' = "http://$hostName/admin";
'AdminAuthenticationMode' = 'Basic';
'AdminAuthenticationUserName' = $userName;
'AdminAuthenticationPassword' = $password;
'TenantForwardingAddress' = "http://$hostName/";
'TenantAuthenticationMode' = 'Basic';
'TenantAuthenticationUserName' = $userName;
'TenantAuthenticationPassword' = $password;
'TenantSourceUriTemplate' = '{subid}/services/helloworld/{*path}';
'TenantTargetUriTemplate' = 'subscriptions/{subid}/{*path}';
'NotificationForwardingAddress' = "http://$hostName/admin";
'NotificationAuthenticationMode' = 'Basic';
'NotificationAuthenticationUserName' = $userName;
'NotificationAuthenticationPassword' = $password;
}
Write-Host -ForegroundColor Green "Create new resource provider '$rpName'..."
$rp = New-ResourceProvider @rpSettings
Write-Host -ForegroundColor Green "Created new resource provider '$rpName'."