2016 年六月

第 31 卷,第 6 期

本文章是由機器翻譯。

Azure 應用程式服務 - 使用 Azure 應用程式服務將網頁轉換成 PDF

Benjamin Perkins

轉換 Web 頁面以 PDF 新,不過是我的目標 — 若要將連結放在我的網站提供簡單的方式來即時 PDF 文件轉換成特定頁面的訪客 — 開啟出是有點複雜。許多網站和開放原始碼二進位檔案,可讓您這麼做,但我曾經找連接的點,並得到我想我想要的方式。

最佳,或至少我最愛、 網頁-PDF 轉換子就是呼叫 wkhtmltopdf 的開放原始碼程式 (wkhtmltopdf.org),它會使用命令列中所示 [圖 1

從主控台執行 wkhtmltopdf 轉換器
[圖 1 從主控台執行 wkhtmltopdf 轉換器

不過,從命令列執行的程式是與使用按鈕在網頁上的即時轉換。

我在過去的幾個月,參與此解決方案的不同部分,但執行 wkhtmltopdf 的處理序 stubbornly 無法我無法達到我的目標。仍未解答的問題是 ︰ 「 如何取得 Microsoft Azure App Service Web Apps 產生此程序來建立 PDF? 」 沙箱中執行的應用程式服務 Web 應用程式,而且我知道從一開始,我無法這麼做 — 時發生零可能會讓電腦啟動和執行程序在伺服器上從用戶端傳來的要求。使用過 IIS 支援小組多年,我知道做這項工作,甚至在獨立版的 IIS 會要求組態會使安全性分析師會失去睡眠。然後,我想的 WebJobs。

WebJobs 進行完全這種情況下,由於連續或從外部來源; 觸發時,他們可以執行可執行檔例如,從 Azure SDK 手動或使用 Azure 排程器、 CRON 或 Azure WebJob API (bit.ly/1SD9gVJ)。而且,一下子,已答案。我無法從應用程式服務 Web 應用程式使用 WebJob API 呼叫 wkhtmltopdf 程式。方案的其他元件已早已制定。最後我拼圖的最後一項為 [圖 2 顯示。

完整的解決方案
[圖 2 完整的解決方案

範例程式碼包含與索引頁,可讓使用者輸入的 URL,傳送該網頁已轉換成 PDF,然後下載到用戶端裝置的 [PDF ASP.NET 網站。需要少量的工作,以動態方式此 URL 設為目前的頁面,並讓將頁面傳送至 WebJob API 轉換和下載] 按鈕。這篇文章的後續幾節將討論用來建立方案,並說明如何建置及運用的技術。

HTML-PDF 轉換子概觀

我使用許多技術建立即時 HTML-PDF 應用程式服務 Web 應用程式方案。中的資料表 [圖 3 提供簡短描述這些技術,以及我在以下各節詳細說明。

[圖 3 技術解決方案中使用

技術 簡短描述
Azure App Service Web 應用程式 (S2 計劃) 前端主控 SignalR 程式碼
應用程式服務驗證和授權 確認用戶端身分識別
Azure 儲存體 將 PDF 文件
Azure WebJob PDF 會將 HTML、 PDF 上載至 Azure 儲存體
Azure WebJob API 觸發 WebJob 介面
ASP.NET SignalR 管理伺服器的回應傳回給用戶端

每個區段包含功能與技術的技術,描述加上撰寫程式碼和/或組態需求的詳細資料。因為我已經建立,但是可以這樣做,我已經下令方案的不同部分使用許多不同的順序。技術的目標是要將 URL 傳遞至應用程式服務 Web 應用程式,並取回 PDF。現在就讓我們開始吧。

Azure App Service Web 應用程式

Azure 應用程式服務可讓您使用各種不同的應用程式類型 ︰ Web、 行動、 邏輯 (預覽) 和 API。所有應用程式服務函式的後端在相同的方式在前端有其他可設定的功能。我是指由後端應用程式服務執行不同的服務計劃 (免費、 共用、 基本、 標準和高階) 和執行個體大小 (F1 第 4 頁)。請參閱 bit.ly/1CVtRec 如需詳細資訊。計劃提供功能,例如部署位置、 磁碟空間限制、 自動調整大小,最多執行個體數目和等等,並執行個體大小說明數目專用的 Cpu 與記憶體的每個應用程式服務方案 (ASP),這相當於虛擬機器 (VM)。和前端,指定應用程式服務的功能提供特別設計的功能,讓應用程式部署、 設定和執行在最短的時間內之特定應用程式服務類型。

HTML-PDF 轉換器,我將使用 S2 Azure 應用程式服務 Web 應用程式,因為我不需要任何其他應用程式服務型別所提供的功能。

若要開始,建立 Web 應用程式在 Azure 入口網站中選取 [新增 |Web + 行動 |Web 應用程式,然後提供應用程式名稱、 訂閱、 資源群組和應用程式服務方案,再按 [建立] 按鈕。建立應用程式之後,您可以使用此位置部署可下載的 Visual Studio 2015 方案 convertHTMLtoPDF 中所包含的原始程式碼。結尾的文章,提供部署的詳細資料您必須進行一些變更,以取得如何使用特定的 Web 應用程式和 web 工作的程式碼。

Web 應用程式、 行動應用程式和 API 應用程式包含同盟身分識別 」 功能,來設定驗證和授權與 Azure Active Directory 和其他識別提供者如 Facebook、 Microsoft Live Twitter 等等下, 一節中所述。

應用程式服務驗證和授權

我決定如何設定應用程式服務驗證 / 授權功能的 Web 應用程式因為完全符合 SignalR 配置,顯示名稱或用戶端的身分識別的目標有其必要。SignalR 建立 ConnectionId 每個用戶端,但比較易懂、 更加個人化使用訪客傳送或公佈訊息時的實際名稱。做法是擷取自驗證功能的回呼,並顯示它使用 SignalR 程式碼。實作 Microsoft 帳戶身分識別提供者 (IDP) 時,X MS-用戶端的主體名稱的要求標頭中傳回已驗證的造訪者的名稱。也可以從 System.Security.Principle.IPrinciple.Identity.Name 屬性存取身分識別名稱。

取得驗證 / 授權功能運作不需要程式碼變更應用程式後端,您只要依照下列指示 bit.ly/1MQZZdF。實作只要求您啟用應用程式服務驗證,可從指定的應用程式服務設定] 刀鋒視窗存取,並設定一或多個驗證提供者中所示 [圖 4

應用程式服務驗證 / 授權功能
[圖 4] 應用程式服務驗證 / 授權功能

此功能提供許多選項 」 時要採取動作要求未獲授權。 」 比方說,若要存取 HTML-PDF Web 應用程式,您必須有 Microsoft 帳戶和驗證身分識別提供者。進行此 IDP 驗證之前,會不執行任何 Web 應用程式程式碼。在此情況下,預先驗證必要的因為我已選取 「 記錄檔中與 Microsoft 帳戶 」 從下拉式清單。套用動作後,應用程式服務的所有資源會都需要這類驗證。您可以設定的驗證功能,讓訪客能夠存取登入頁面或其他端點的 Azure 託管應用程式服務,方法是從下拉式清單中選取 [允許的要求 (無動作) 項目。不過,它就可以取決於應用程式程式碼,來限制存取受保護的頁面。此更細微的方法通常只要執行頁面內的程式碼之前,先檢查 Context.User.Identity.IsAuthenticated 布林值。

無程式碼、 即時 HTML-PDF 轉換方案的最後一個元件是建立和設定 Azure 儲存體帳戶和容器。

Azure 儲存體

Azure 儲存體容器是下載儲存 PDF 檔案的位置。如果公開使用的儲存體容器,任何人都可以存取的檔案裝載於容器中所參考的 url,例如 https://{storage-account}.blob.core.windows.net/{container-name}/{filename.pdf 的檔案名稱}。插入、 更新或移除容器中的檔案需要時執行的程式碼的存取金鑰。透過 Azure 管理入口網站或從 Visual Studio 可能會限制使用角色型存取控制 (RBAC),或只要不允許使用者存取 Azure 訂用帳戶執行。

若要建立儲存體帳戶,請選取 [新增] |資料 + 儲存體和儲存體帳戶。建立容器的位置,儲存體帳戶和 URL 的第一個部分,Name 屬性會變成 ︰ https//{storage-account}.blob.core.windows.net。部署模型屬性可讓您選擇 [資源管理員] 或 [傳統。除非您有現有的應用程式部署到傳統的虛擬網路 (VNET) 時,建議您為所有新的開發活動使用資源管理員。Azure 資源管理員 (ARM) 是更具宣告性的方法,會使用範本和指令碼。相反地,用來處理 「 傳統 」 模式,統稱為 Azure 服務管理員 (ASM),通常會使用程式碼和程式庫。

決定是否要選擇標準或高階效能,當您需要考量成本和輸送量。標準是最具成本效益,儲存不常存取的大量資料的應用程式的最佳選擇。所提供的虛擬機器需要大量 I/O 的需求與最佳效能的固態硬碟 (SSD) 支援高階儲存體。

複寫屬性有許多選項,本機、 區域、 全域和通用的讀取權限,每個提供更高層級 redundency 和協助工具。我的預設設定用於 HTML-PDF 方案,並選取相同的訂閱、 資源群組及與先前建立的 Web 應用程式的位置。

最後,已成功建立儲存體帳戶後,從儲存體帳戶一般分頁中選取 Blob 服務,並新增容器。

新增容器] 分頁上的存取類型可以是私用 (便捷鍵是必要的所有作業)、 (允許公用讀取權限) 的 Blob 或容器 (允許讀取和清單的公用存取)。

這是此解決方案所需的 Azure 設定。讓我們跳到一些 C# 程式碼現在以了解如何取得即時 HTML-PDF 轉換為工作。

Azure WebJob

Azure WebJob 功能支援以連續、 觸發或已排程的方式執行指令碼或可執行檔 (bit.ly/1Og9P95)。不要將這混淆與 Windows 服務。把它改為工作或批次作業,才需要在特定時間執行或發生特定事件。在此情況下,使用即時 HTML-PDF 轉換工具觸發程序使用 API 的 web 工作。或者,透過 Visual Studio 或使用 Azure 排程器工作集合的功能,可以是手動啟動 WebJobs。

Azure App Service 平台決定 web 工作會觸發或連續根據 web 工作所在的路徑。如果 web 工作被觸發時,應部署至 d:\home\site\wwwroot\app_data\jobs\triggered\{job 名稱} 目錄。是否為連續,只要將取代的引動的目錄路徑連續。若要部署 web 工作,將 app_data\jobs\triggered\ {作業名稱} 目錄加入至 Visual Studio 中的網站專案、 加入指令碼或可執行檔,類似於描述 bit.ly/1Uczf8L, ,並將它發行至 Azure App Service 平台。

我建立的 web 工作會執行兩項工作,將頁面上指定的 Web 位址的轉換 PDF 檔案,而且該的 PDF 檔案上傳至 Azure 儲存體容器。我可以呼叫 wkhtmltopdf.exe 直接使用 WebJob 的 API,但我就必須進行第二個的 API 呼叫,然後將檔案上傳至儲存體和,就已經需要進行大量管理檔案和結果傳送至用戶端的複雜度。因此,我會建立名為 convertToPdf (這就可以看到在來源中) 來執行這兩項工作,一個接著一個,並傳回 PDF 檔案的位置來提出要求的用戶端的主控台應用程式。

啟動 wkhtmltopdf.exe,並將它傳遞兩個必要的參數 — 網址及 PDF 檔名 — 中所示,我會使用 System.Diagnostics.ProcessStartInfo, [圖 5

[圖 5 開始 wkhtmltopdf.exe

static void Main(string[] args)
{
  var URL = args[0];
  var filename = args[1];
  try
  { 
    using (var p = new System.Diagnostics.Process())
    {
      var startInfo = new System.Diagnostics.ProcessStartInfo
      {
        FileName = "wkhtmltopdf.exe",
        Arguments = URL + " " + filename,
        UseShellExecute = false
      };
      p.StartInfo = startInfo;
      p.Start();
      p.WaitForExit();
      p.Close();
    }
  }
  catch (Exception ex) { WriteLine($"Something Happened: {ex.Message}"); }
}

程式碼建立 ProcessStartInfo 類別的執行個體,並設定檔案名稱、 引數和其他類別的屬性。方法接著啟動 FileName 屬性所識別的程序、 等候它完成並結束此程序。根據預設,當 web 工作上傳至 Azure App Service 環境中,它會複製平台到暫存的本機目錄 — D:\local\temp\jobs\triggered\ {作業名稱} \ * * * \,其中 * 是動態產生的目錄名稱。這也是 PDF 檔案實際儲存之前上傳至 Azure 儲存體容器。檔案僅位於本機,因為它不是持續性或存取 Azure App Service Web 應用程式的任何其他執行個體。如果您執行多個執行個體上,您可能不會看到它在本機目錄中,但是全域存取 Azure 儲存體容器。

一旦建立 PDF 檔案時,它需要上傳至 Azure 儲存體容器。您可以找到絕佳的教學課程,詳細說明如何在 bit.ly/1OAXIQ0。在 [摘要] 建立、 讀取、 更新和刪除容器中的內容的能力會受到兩個 NuGet 套件、.NET 的 Microsoft Azure Configuration Manager 程式庫和.NET 的 Microsoft Azure 儲存體用戶端程式庫。這兩個封裝都參考從 convertToPdf WebJob 的主控台應用程式。若要安裝它們,以滑鼠右鍵按一下主控台應用程式專案,再管理 NuGet 封裝。然後搜尋,安裝程式庫。

我可以使用 CloudConfigurationManager.GetSetting,這是 Microsoft Azure Configuration Manager 程式庫的一部分,來擷取儲存體連接字串值,如建立 Azure 儲存體容器的連接。值是帳戶名稱,也就是 Azure 儲存體帳戶名稱 (在此情況下,converthtmltopdf),不為容器名稱和 AccountKey,即可設定擷取從儲存體帳戶刀鋒視窗 |存取金鑰。[圖 6 示範如何將 PDF 檔案上傳至先前建立的 Azure Stroage 容器。

[圖 6 將 PDF 上傳至 Azure 儲存體容器

static void Main(string[] args)
{
  try
  {
    CloudStorageAccount storageAccount =
      CloudStorageAccount.Parse(
      CloudConfigurationManager.GetSetting("StorageConnectionString"));
    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer container =
      blobClient.GetContainerReference("pdf");
    CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename);
    using (var fileStream = System.IO.File.OpenRead(filename))
    {
      blockBlob.UploadFromStream(fileStream);
    }
  }
  catch (StorageException ex) { WriteLine($"StorageException: {ex.Message}"); }
  catch (Exception ex) { WriteLine($"Exception: {ex.Message}"); }
}

此設定資訊用於在 CloudStorageAccount 類別,這是 Microsoft Azure 儲存體用戶端程式庫的一部分做為輸入。若要從 App.config 檔案中擷取 StorageConnectionString CloudConfigurationManager 的替代方案,您可以使用 System.Configuration.ConfigurationManager.AppSettings["StorageConnectionString"]。

我使用 CloudStorageAccount 類別的執行個體建立 CloudBlobClient,然後使用 blobClient GetContainerReference 方法以取得 Azure 儲存體容器的參考。然後,使用 GetBlockBlobReference CloudBlobContainer 類別方法,建立 CloudBlockBlob,其中包含要上傳的檔案名稱。這兩個可執行檔,如先前所述,位於 D:\local\temp\jobs\triggered\convertToPdf\***\ 目錄 — 其中 PDF 檔案是儲存,而參考相同的位置。這就是為什麼沒有路徑的檔名是必要的因為檔案建立在與可執行檔相同的暫存目錄。最後,我將 System.IO.FileStream 使用 System.IO.File.OpenRead 方法的執行個體,並將它上傳至容器使用 CloudBlockBlock 類別的 UploadFromStream 方法。

當程式碼完成,並會編譯時,新增 wkhtmltopdf.exe 和 convertToPdf.exe \app_data\jobs\triggered\convertToPdf 目錄將會發行至 Azure App Service Web 應用程式的 Visual Studio 方案。您也可以發行只使用 FTP 工具,WebJob 檔案傳送到 Web 網站程式碼。

現在,convertToPdf 會建立並儲存 PDF web 工作已完成,讓我們看看如何從 C# 使用 HttpClient 程式碼呼叫 web 工作。所有這些之後,仍然建立允許訪客的 URL 傳送給 web 工作,並取得回 pdf URL 下載的 SignalR 型 Azure App Service Web 應用程式前端。

Azure WebJob API

我寫了一篇關於 Azure WebJob API (bit.ly/1SD9gVJ) 在我討論如何呼叫之 API 的 web 工作觸發程序。基本上,WebJob API 是執行指令碼的 Web 介面,或可執行檔使用的引數傳入的 URL。

我建立了簡單的主控台應用程式取用者,在顯示之前建立觸發程序 WebJob API SignalR 中心, [圖 7, ,WebJob API 呼叫。它包含在可下載的解決方案,稱為 convertToPDF 取用者。此主控台應用程式簡化程式碼撰寫、 疑難排解和測試,因為它從情節移除 SignalR 功能。

[圖 7 簡單的主控台應用程式取用者

static async Task<string> ConvertToPDFWebJobAPIAsync(string Url)
{
  try
  {
    using (var client = new HttpClient())
    {
      client.BaseAddress = new Uri(
        "https://converthtmltopdf.scm.azurewebsites.net/");
      client.DefaultRequestHeaders.Accept.Clear();
      var userName = "your userName";
      var password = "your userPWD ";
      var encoding = new ASCIIEncoding();
      var authHeader =
        new AuthenticationHeaderValue("Basic",
          Convert.ToBase64String(
          encoding.GetBytes(string.Format($"{userName}:{password}"))));
      client.DefaultRequestHeaders.Authorization = authHeader;
      var content = new System.Net.Http.StringContent("");
      string filename = Guid.NewGuid().ToString("N").Substring(0, 8) + ".pdf";
      HttpResponseMessage response =
        await client.PostAsync(
        $"api/triggeredwebjobs/convertToPDF/run?arguments={Url} 
          {filename}", content);
      if (!response.IsSuccessStatusCode)
      {
        return $"Conversion for {Url} {filename} failed: " +
          DateTime.Now.ToString();
      }
      return $"{response.StatusCode.ToString()}:
        your PDF can be downloaded from here:";
    }
  }
  catch (Exception ex)  {  return ex.Message;  } }

使用 HttpClient System.Net.Http.HttpClient 類別方法來提出要求。然後要求所使用之原始檔控制管理 SCM Azure 應用程式服務 Web 應用程式 URL 為 BaseAddress 屬性。您可能已經知道,每個 Azure App Service Web 應用程式隨附於 SCM URL (也稱為 KUDU 主控台),可使用 https://{appname}.scm.azurewebsites.net 存取,而且呼叫 WebJob API 所用的 URL。將 /basicAuth 附加到 URL 結尾,可讓呼叫的用戶端使用基本的挑戰回應信號交換來進行驗證。使用者名稱和密碼會瀏覽至 Azure App Service Web 應用程式都可從 Azure 管理入口網站下載的發行設定檔認證,並選取 [取得發行設定檔。在下載 *。您會發現 userName 和 userPWD 使用程式碼中的 PublishSettings 檔案。為了簡單起見,我的使用者名稱和密碼的應用程式,但這些應該放在安全的位置和擷取自真實世界的程式碼,所以如果有需要請選取 [Azure 管理入口網站中的 [重設發行設定檔可以變更它們的硬式編碼。您不想每次某個項目變更部署更新的程式碼。

基本驗證需要關聯的使用者名稱和密碼以基本的標頭,以下列格式的 ASCII 編碼 Base64 字串 ︰ 基本 userName:password。使用建立的標頭值之後 ASCIIEncoding System.TextASCIIEncoding 類別方法,以及 ToBase64String System.Convert 類別方法,會將它加入 System.Net.Http.Headers.AuthenticationHeaderValue 類別,以及基本的標頭名稱的新執行個體。使用建立會使用 System.Net.Http.HttpClient 類別的執行個體加入 AuthenticationHeaderValue DefaultRequestHeaders.Authorization System.Net.Http.Headers.HttpRequestHeaders 類別屬性的陳述式。

輸入檔名中,我使用 GUID 使用 Substring 方法的 String 類別的 guid 移除連字號的八個字元。使用 NewGuid System.Guid 類別方法,將 「 N 」 參數傳遞至 Guid 類別的 ToString 方法建立的 GUID。最後,我以非同步方式張貼至 WebJob API 使用 PostAsync System.Net.Http.HttpClient 類別方法,做為 web 工作的引數傳遞的 URL 和檔案名稱,並等候其完成。此程序順利完成時,串連的檔名的 Azure 儲存體容器的 URL 會顯示到主控台,否則會傳送通知的 PDF 建立失敗。

若要查看 web 工作的狀態,請移至 Azure 管理入口網站中,瀏覽至 Azure App Service Web 應用程式執行的 WebJob,並選取設定 |Web 工作。在 Webjob 刀鋒視窗會包含名稱、 類型、 狀態和 WebJob 執行記錄檔非常有用的連結。按一下連結來存取特定的 WebJob KUDU 主控台以查看最近的工作執行,其狀態與連結的 web 工作,實際的記錄檔輸出中所示 [圖 8。比方說,如果 web 工作的主控台應用程式中,當您使用 System.Console.WriteLine 方法來寫入主控台的 [輸出] 視窗中執行的狀態時,此資訊也會寫入至 WebJob 記錄檔,並透過從 Azure 管理入口網站的連結來檢視。

Azure web 工作的輸出記錄檔
[圖 8 Azure web 工作的輸出記錄檔

一旦此組件已正常運作,所保留的只是只要簡單複製並貼至 SignalR 的解決方案,接下來要討論。

ASP.NET SignalR

ASP.NET SignalR 是 ASP.NET 開發人員,以便即時通知新增至瀏覽器為基礎、 行動或.NET 用戶端應用程式傳送的開放原始碼程式庫。用戶端遠端程序呼叫 (RPC) 伺服器會使用用戶端呼叫 JavaScript 函數,從伺服器端.NET 程式碼的 API。之前這項技術的存在,常見的方法,以達到類似的解決方案使用 ASP.NET UpdatePanel 控制項,會經常重新整理本身所提出要求到伺服器,以檢查是否發生在狀態資料的任何變更。這是更多的提取方法,用戶端觸發的伺服器,而非將即時資料發送到用戶端,因為它會變成可用的伺服器要求的位置。

用戶端 JavaScript 程式碼具現化中樞 proxy,會公開伺服器可以觸發,並識別伺服器端時要呼叫方法 (傳送) click 事件的方法就會發生 ︰

var pdf = $.connection.pDFHub;
pdf.client.broadcastMessage = function (userId, message) {};
pdf.client.individualMessage = function (userId, message) {};
$('#sendmessage').click(function () {
  pdf.server.send($('#displayname').val(), $('#message').val());
});

在用戶端 JavaScript Hub proxy 的名稱是中心的建立在伺服器端; 上執行名稱在此範例中,中樞命名為 PDFHub,並且它繼承自 Microsoft.AspNet.SignalR.Hub 類別。用戶端所公開的兩個方法是 broadcastMessage 和 individualMessage;每個都有符合的伺服器端 Send 方法、 使用者識別碼和訊息模式的參數的函式。訪客 Web 應用程式上按一下 [傳送] 按鈕時在伺服器上呼叫 Send 方法。ConvertToPDFWebJobAsync 方法是剪下和貼上呼叫 Azure WebJob API 來提供的網頁轉換為 PDF 檔案,並將其載入至 Azure 儲存體容器的上一節中所建立的主控台應用程式。最後,在伺服器端傳送方法會使用 Microsoft.AspNet.SignalR.Hub.Clients 屬性,它會實作 IHubCallerConnectionContext 介面的執行個體。用戶端屬性連結到兩個用戶端方法,並提供從伺服器傳送至適當的用戶端的資訊 (請參閱 [圖 9)

圖 9 PDFHub 類別

public class PDFHub : Hub
{
  public void Send(string userId, string message)
  {
    string name = Context.User.Identity.Name;
    string convertMessage = "no message yet";           
    Task.Run(async () =>
    {
      convertMessage = await ConvertToPDFWebJobAPIAsync(message);
    }).Wait();
    Clients.All.broadcastMessage(userId, "just converted: " + message +
      " to a pdf");
    Clients.Client(Context.ConnectionId).individualMessage(
      name, convertMessage);
  }
}

您可能會好奇為何我選擇使用 SignalR 來使用 Azure WebJob API,而不是只是簡單的 ASP.NET Web Form 或 ASP.NET MVC Web 應用程式。的確,有許多種方式可以使用的 API。例如,此解決方案的可下載程式碼會包含使用 Azure WebJob API,因此為什麼使用 SignalR 的主控台應用程式嗎?

若要回答這個問題,請注意,在 [圖 9 ,當伺服器連線的用戶端有一則訊息,兩個用戶端叫用方法。首先,broadcastMessage 方法會通知所有連線的用戶端特定人員 PDF,來轉換指定的 URL,但它並不提供 Azure 儲存體容器和下載 PDF 檔案的連結。第二個用戶端方法是 individualMessage,將 PDF 轉換成 HTML 和連結的狀態傳送串連的 PDF 檔名的 Azure 儲存體容器。使用 SignalR 的原因是提供一種社交互動取用的用戶端提供連線的用戶端上的 Azure 應用程式服務 Web 應用程式的相關資訊。

請記得先前我提到 System.Security.Principle.IPrinciple.Identity.Name 並記下如何讓它的 Web 應用程式更易記因為它無法呈現到用戶端,而不是訪客的名稱,例如,唯一的但一般 connectionId。Context.user.Identity.name 屬性用來設定的訪客,驗證其 Microsoft 帳戶,將用戶端的共享的易懂性的名稱。

現在,所有需要會發生此問題是使用 Visual Studio 或 FTP 應用程式的 Azure 應用程式服務 Web 應用程式平台部署的程式碼 (用戶端程式碼、 伺服端程式碼和 Azure WebJob),並測試它。如何將部署至 Azure App Service Web 應用程式的詳細的指示,請參閱 bit.ly/1nXnhmB

軟體即服務

撰寫本文時,我開始思考軟體即服務 (SaaS) 以及這個即時 HTML-PDF 轉換子就是 SaaS 解決方案或只是在雲端中執行的 API 可存取應用程式。我決定公開 Azure WebJob 的 API,依據名稱本身,讓它 API,並不 SaaS。以我的解決方案,WebJob API 是透過 URL 公開,並受基本驗證。API 可供其他取用者,來建立其最上層,或將功能加入至應用程式中,這是 API 定義。不過,沒有 api 取用者,因為其他功能前後加入已使用的 API,可由多個線上使用者,使它符合 SaaS 的定義。因此,單獨 Azure WebJob API 時,只是一個 API,我在 Azure App Service Web 應用程式平台上執行的 ASP.NET SignalR 用戶端是 SaaS 解決方案。確定它不是 OneDrive、 Office 365、 CRM Dynamics Online 或 Hotmail,但是如果您需要將網站轉換成真正快速的 pdf 格式,您知道出現的位置。

結論

本文探討了三項 Azure 功能 ︰ 在 Azure App Service Web 應用程式。Azure 服務驗證和授權。Azure 儲存體帳戶和容器。這些功能都支援 Azure WebJob、 Azure WebJob API 公開 (expose) 和裝載 ASP.NET SignalR 瀏覽器為基礎的取用者的平台。我將討論每個功能和設定行動裝置所需的步驟。我也會描述 Azure webjob Azure WebJob API,而 ASP.NET SignalR 用戶端呼叫的程式碼的程式碼。


Benjamin Perkins是高階工程師,Microsoft,C#、 IIS、 NHibernate 和 Microsoft Azure 上的四個書籍的作者。他最近與他人合著過開頭 C# 6 程式設計使用 Visual Studio 2015 (John Wiley & 兒子)。與他連絡 benperk@microsoft.com

感謝以下的微軟技術專家對本文的審閱: Richard Marr
Richard Marr 是 microsoft 資深回報工程師。他曾在 Microsoft 支援組織 16 年,支援 IIS、 ASP.Net 和目前的 Azure 應用程式服務。