2016 年 6 月
第 31 卷,第 6 期
此文章由机器翻译。
Azure App Service - 使用 Azure App Service 将网页转换成 PDF
转换随后为 PDF 页是什么新事物,但我的目标 — 若要将链接放在网站上提供的简单方法转换为实时 PDF 文档的特定页的访问者 — 具有点复杂。有许多网站和开放源代码二进制文件,您可以执行此操作,但我不能曾经能够连接各点,并获取我希望我希望的方式的输出。
效果最佳,或者至少我最喜欢的网页 PDF 转换器是开放源代码程序调用 wkhtmltopdf (wkhtmltopdf.org),它使用命令行中所示 图 1。
图 1 从控制台运行 wkhtmltopdf 转换器
但是,从命令行运行程序是从 Web 页的按钮上使用的实时转换一大步。
我从事此解决方案的不同部分过去个月内,但 wkhtmltopdf 进程的执行仍会顽固地阻止我实现我的目标。保持未答复的问题是 ︰ "如何获取 Microsoft Azure App Service Web Apps 来生成此过程以创建 PDF?" 在沙盒中运行 app Service Web Apps 且我知道从一开始,无法执行该操作,没有计算机启动并运行一个进程在服务器上从客户端发送的请求零可能性。我曾 on IIS 支持团队很多年,知道实现此功能甚至在独立版本的 IIS 上将需要配置可能会使安全分析人员失去睡眠。然后,我认为 web 作业。
Web 作业进行完全这种情况下,因为持续或从外部源; 触发时,它们可以运行可执行文件例如,从 Azure SDK 中手动或通过使用 Azure 计划程序、 CRON 或 Azure web 作业 API (bit.ly/1SD9gVJ)。并且,ō,没有应答。我无法从应用程序服务 Web 应用程序使用 web 作业 API 调用 wkhtmltopdf 程序。该解决方案的其他组件必须已经了解了;最后我最后一条迷题中,作为 图 2 显示。
图 2 是完整的解决方案
此代码示例包含有索引页,用户可以输入一个 URL,因此将该 Web 页后,可以将转换为 PDF,然后将 PDF 下载到客户端设备的 ASP.NET Web 站点。它将很少努力动态地将此 URL 设置为当前页和具有将页面发送到用于转换的 WebJob API 和下载按钮。这篇文章下面几节讨论技术,用于创建解决方案,并解释如何生成并利用它们。
HTML PDF 转换器概述
我使用多种技术来创建实时 HTML PDF App Service Web 应用程序解决方案。中的表 图 3 显示这些技术的简要描述和我在下面几节中详细介绍它们。
图 3 技术解决方案中使用
技术 | 简要说明 |
Azure App Service Web 应用程序 (S2 计划) | 承载 SignalR 代码的前端 |
应用程序服务身份验证和授权 | 确认客户端标识 |
Azure 存储 | PDF 文档存储 |
Azure web 作业 | 将 HTML 转换为 PDF、 将 PDF 上载到 Azure 存储空间 |
Azure web 作业 API | 用于触发 web 作业的接口 |
ASP.NET SignalR | 返回到客户端从服务器管理响应 |
每个部分包括的一种技术,功能和技术的说明以及编码和/或配置要求的详细信息。我创建了它们,但它无法完成,我所订购解决方案的不同部分使用不同的序列号。技术目标是将 URL 传递到应用程序服务 Web 应用程序并获得 PDF。我们现在开始吧。
Azure App Service Web 应用程序
Azure 应用程序服务使您可以使用不同的应用程序类型 ︰ Web、 移动、 逻辑 (预览版) 和 API。所有应用程序服务正常工作的后端相同的方式与每个前端上具有其他可配置的功能。后端我的意思是应用程序服务运行在不同的服务计划 (免费、 共享、 基本、 标准和高级版) 和实例大小 (F1 P4);请参阅 bit.ly/1CVtRec 的更多详细信息。计划提供了功能,如部署槽、 磁盘空间限制、 自动缩放,最大实例数和等,并实例大小描述专用的 Cpu 的数量和内存的每个应用服务计划 (ASP),这等同于虚拟机 (VM)。并为前端,给定的应用程序服务的功能专门设计为提供功能,让应用程序部署、 配置和运行在最短的时间内的特定应用程序服务类型。
为 HTML PDF 转换器,我将使用 S2 Azure App Service Web 应用,因为我不需要任何其他应用程序服务类型提供的功能。
若要开始,创建 Web 应用程序在 Azure 门户中选择新建 |Web + 移动 |Web 应用程序,然后提供应用程序名称,订阅、 资源组和 App Service 计划,然后按创建按钮。一旦您创建应用程序,您使用此位置部署可下载 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 应用程序代码。在这种情况下,预身份验证必需的因为我选择了"日志 in with Microsoft 帐户"从下拉列表。应用操作后,应用程序服务的所有资源都需要这种身份验证。您可以配置身份验证功能,以便访问者可以访问登录页或 Azure 托管应用程序,则该服务通过从下拉列表中选择允许请求 (无操作) 项的其他终结点。但是,它都将取决于应用程序代码来限制对受保护的页面访问。这一更精确方法通常通过在页面内的代码在执行前检查 Context.User.Identity.IsAuthenticated 布尔值。
无需编写代码、 实时 HTML PDF 转换解决方案的最后一个组件是创建和配置 Azure 存储帐户和容器。
Azure 存储
Azure 存储容器是 PDF 文件下载的存储位置的位置。如果存储容器设置为公共方法,任何人都可以访问承载于容器中通过引用使用如 https://{storage-account}.blob.core.windows.net/{container-name}/{filename.pdf URL 的文件名的文件}。插入、 更新或删除从容器文件需要访问键时执行的代码。执行以便可以使用基于角色的访问控制 (RBAC) 限制通过 Azure 管理门户或从 Visual Studio 或只需通过不允许用户访问 Azure 订阅的操作。
若要创建存储帐户,选择新建 |数据 + 存储和存储帐户。名称属性将成为存储帐户创建容器和 URL 的第一部分 ︰ 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 web 作业
Azure web 作业功能支持连续、 触发或计划的方式运行脚本或可执行文件 (bit.ly/1Og9P95)。不要混淆这与 Windows 服务;把它改成作为任务或者批处理作业,需要在特定时间运行或特定事件发生时。在这种情况下,使用实时 HTML PDF 转换工具触发器使用 API 的 web 作业。或者,web 作业可以手动启动通过 Visual Studio 或通过使用 Azure 计划程序作业集合功能。
Azure App Service 平台确定 web 作业为以下对象触发或连续根据在其中存储 web 作业的路径。如果 web 作业将会触发,应该会部署到的 d:\home\site\wwwroot\app_data\jobs\triggered\{job 名称} 目录中。如果要连续它,则只需将触发的目录路径替换连续。若要部署 web 作业,将 {job-name} app_data\jobs\triggered\ 目录添加到 Visual Studio 中的网站项目,将脚本或可执行文件添加到它类似于在描述的内容 bit.ly/1Uczf8L, ,并将其发布到 Azure App Service 平台。
我创建了 web 作业执行两项任务,将在给定的 Web 地址页上转换为 PDF 文件并将该 PDF 文件上载到 Azure 存储容器。我可以调用 wkhtmltopdf.exe 直接使用 web 作业 API,但我将不得不进行第二个 API 调用,然后将文件上载到存储并将已涉及多项中管理该文件并将结果发送回客户端的复杂度。因此,我创建一个名 convertToPdf (它您可以看到在源中) 执行一次是在另一个,这两个任务和 PDF 文件的位置返回给发出请求的客户端的控制台应用程序。
启动 wkhtmltopdf.exe 并将其传递两个必需的参数 — Web 地址和 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 属性所标识的过程,等待其完成并退出进程。默认情况下,当 WebJob 上载到 Azure App Service 环境中,将其复制平台到临时的本地目录 — D:\local\temp\jobs\triggered\ {job-name} \ * * * \,其中 * * * 是动态生成的目录名称。这是物理之前上载到 Azure 存储容器存储 PDF 文件的位置。该文件只是本地的因为它不是持久或访问 Azure App Service Web 应用的任何其他实例。如果您在多个实例上运行,可能看不到它在本地目录中,但 Azure 存储容器均可全局访问。
一旦创建 PDF 文件时,它需要将上载到 Azure 存储容器。您可以找到详细介绍了如何执行这一切所需的极好教程 bit.ly/1OAXIQ0。总之,能够创建、 读取、 更新和删除容器中的内容是由两个 NuGet 程序包,用于.NET 的 Microsoft Azure 配置管理器库和控制用于.NET 的 Microsoft Azure 存储客户端库。这两个包从 convertToPdf web 作业的控制台应用程序引用。若要安装这些组件,右键单击控制台应用程序项目,然后再管理 NuGet 包。然后搜索并安装的库。
我可以使用 CloudConfigurationManager.GetSetting,是 Microsoft Azure 配置管理器库的一部分,以检索在连接到 Azure 存储容器的存储连接字符串值。值是帐户名,即 Azure 存储帐户不容器名称和 AccountKey,通过单击设置的情况下从存储帐户边栏检索 (在本例中为 converthtmltopdf),命名 |访问键。图 6 演示如何将 PDF 文件上载到以前创建的 Azure 存储容器。
图 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 存储客户端库的一部分。作为 CloudConfigurationManager 从 App.config 文件中检索 StorageConnectionString 的替代方法,您可以使用 System.Configuration.ConfigurationManager.AppSettings["StorageConnectionString"]。
我使用 CloudStorageAccount 类的实例创建 CloudBlobClient,然后使用 blobClient 使用 GetContainerReference 方法获取对 Azure 存储容器的引用。然后,使用 CloudBlobContainer 类的 GetBlockBlobReference 方法,创建 CloudBlockBlob 包含正在上载的文件的名称。这两个可执行文件,正如前面提到,位于 D:\local\temp\jobs\triggered\convertToPdf\***\ 目录 — — 相同的位置存储以及引用 PDF 文件的位置。这是为什么没有到文件名路径是必需的因为作为可执行文件的同一临时目录中创建的文件。最后,我将 System.IO.FileStream 使用 System.IO.File.OpenRead 方法的实例传递,并将其上载到使用 CloudBlockBlock 类的 UploadFromStream 方法的容器。
该代码已完成并将编译后,将 wkhtmltopdf.exe 和 convertToPdf.exe 添加到将被发布到 Azure App Service Web 应用的 Visual Studio 解决方案的 \app_data\jobs\triggered\convertToPdf 目录。此外可以发布不仅仅是使用 FTP 工具的 web 作业文件传输直接访问 Web 站点代码。
ConvertToPdf web 作业,创建和存储 PDF 过程完成之后,让我们看一下如何从 C# 代码中使用 HttpClient 调用 web 作业。之后,所有这些仍然创建基于 SignalR 的 Azure App Service Web 应用的前端以允许访问者将 URL 发送到 web 作业,并获取返回的 URL 为 pdf 格式下载。
Azure web 作业 API
我编写一篇文章了有关 Azure web 作业 API (bit.ly/1SD9gVJ) 在我讨论如何调用的 API 的触发 web 作业。从本质上讲,web 作业 API 是一个 Web 界面执行脚本或可执行文件使用的参数的 URL 中传递。
在创建之前触发 web 作业 API SignalR Hub,我创建了一个简单的控制台应用程序使用者中, 所示 图 7, ,调用 web 作业 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; } }
System.Net.Http.HttpClient 类的 HttpClient 方法用于发出请求。然后使用源控件管理 SCM 基于 Azure 应用服务 Web 应用程序 URL 作为 BaseAddress 属性请求。您可能知道,每个 Azure 应用服务 Web 应用程序附带了一个 SCM URL (又称 KUDU 控制台),是使用 https://{appname}.scm.azurewebsites.net 可以访问和用来调用 web 作业 API 的 URL。向 URL 的末尾追加 /basicAuth 允许调用的客户端使用基本的质询响应握手进行身份验证。用户名和密码是可从 Azure 管理门户中通过导航到 Azure App Service Web 应用的发布配置文件凭据并选择 Get 发布配置文件。在下载 *。您会发现 userName 和 userPWD 若要使用在代码中的 PublishSettings 文件。为简单起见,我硬编码的用户名和密码到应用程序,但在现实世界这些应放置在一个安全的位置并从检索到的代码,因此如果需要通过在 Azure 管理门户中选择重置发布配置文件可以更改它们。您不想必须部署更新的代码,每次发生更改。
基本身份验证要求将相关联的用户名和密码向这种格式中的基本标头为 ASCII 编码 Base64 字符串 ︰ 基本的用户名 ︰ 密码。使用 ASCIIEncoding System.TextASCIIEncoding 类方法,以及 System.Convert 类 ToBase64String 方法创建的标头值后将其添加到 System.Net.Http.Headers.AuthenticationHeaderValue 类,以及基本的标头名称的新实例。使用创建中采用的 System.Net.Http.HttpClient 类的实例将 AuthenticationHeaderValue 添加到 System.Net.Http.Headers.HttpRequestHeaders 类的 DefaultRequestHeaders.Authorization 属性的语句。
输入文件名,我将使用八个字符使用 Substring 方法字符串类的短划线拔掉 GUID 的 GUID。已创建的 GUID,通过将"N"参数传递给 Guid 类的 ToString 方法使用 System.Guid 类的 NewGuid 方法。最后,我以异步方式发布到 web 作业 API 使用 System.Net.Http.HttpClient 类的 PostAsync 方法将作为 web 作业的参数传递的 URL 和文件名和等待其完成。该过程成功完成时,串联的文件名的 Azure 存储容器的 URL 显示到控制台,否则,将通知发送 PDF 创建失败。
若要查看 web 作业的状态,请转到 Azure 管理门户中,导航到 Azure 应用服务 Web 应用程序运行 web 作业,并选择设置 |Web 作业。WebJobs 分页包含名称、 类型、 状态和 web 作业执行日志非常有用的链接。单击此链接来访问特定 web 作业的 KUDU 控制台,以查看最近的作业运行,其状态和链接到 web 作业,实际的日志输出,如中所示 图 8。例如,如果 web 作业是一个控制台应用程序中,当您使用 System.Console.WriteLine 方法执行的状态写入控制台输出窗口,此信息也会写入到 web 作业日志,并通过从 Azure 管理门户的链接可供查看。
图 8 Azure web 作业输出日志
一旦此部件已按预期方式工作的所有剩余任务就只是简单的复制和粘贴到下一步讨论的 SignalR 解决方案。
ASP.NET SignalR
ASP.NET SignalR 是 ASP.NET 开发人员,以便发送实时通知到基于浏览器、 移动或.NET 客户端应用程序的一个开源库。服务器到客户端的远程过程调用 (RPC) 利用了一个 API,客户端上调用 JavaScript 函数,从服务器端.NET 代码。在这种技术存在之前, 实现类似的解决方案的常用方法都使用会频繁刷新自身向服务器以检查数据的状态中的任何更改时发出请求的 ASP.NET UpdatePanel 控件。这是更多请求方法,其中客户端触发对服务器而不是将实时数据推送到客户端,就立即变为可用的服务器的请求。
客户端的 JavaScript 代码实例化一个中心代理,公开的方法,该服务器可能会触发并标识的服务器端方法时要调用 (发送) 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 代理的名称是创建要在服务器端; 上运行的中心名称在此示例中,中心数据库名为 PDFHub,和它从 Microsoft.AspNet.SignalR.Hub 类继承。由客户端公开的两种方法是 broadcastMessage 和 individualMessage;每个具有带参数的服务器端 Send 方法、 用户 Id 和消息的模式相匹配的函数。时用的 Web 应用程序的访问者单击发送按钮,将在服务器上调用 Send 方法。ConvertToPDFWebJobAsync 方法是剪切和粘贴的调用 Azure WebJob API 将提供的 Web 页转换到 PDF 文件并将其加载到 Azure 存储容器上一节中创建的控制台应用程序。最后,服务器端 Send 方法使用 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 web 作业 API 而不是只是简单 ASP.NET Web 窗体或 ASP.NET MVC Web 应用程序。这是真的,有很多方法可以使用的 API。例如,对于此解决方案的可下载代码包含使用 Azure web 作业 API,那么为什么还要做我使用 SignalR 一个控制台应用程序?
要回答这个问题,请注意,在 图 9 时该服务器已连接的客户端有一条消息,会调用两个客户端的方法。首先,broadcastMessage 方法通知所有连接的客户端的特定人员转换给定的 URL 为 PDF,但它不提供对 Azure 存储容器及其下载的 PDF 文件的链接。第二个客户端的方法是 individualMessage,将向 PDF 转换 HTML 和链接的状态发送到 Azure 存储容器,其中包含串联的 PDF 文件名称。使用 SignalR 的原因是为使用客户端通过提供有关在 Azure 应用程序服务 Web 应用程序上发生了什么情况信息的所有连接的客户端提供一种社交互动。
回想一下,之前我提到 System.Security.Principle.IPrinciple.Identity.Name 并说明如何使其 Web 应用程序更加友好,因为它可能造成访问者的姓名到客户端而不是,例如,唯一,但泛型 connectionId。Context.user.Identity.name 属性用于设置在距访客,验证他们的 Microsoft 帐户,从而将添加到客户端社交友好的名称。
现在,需要发生这种情况是将代码 (客户端代码、 服务器代码和 Azure web 作业) 部署到使用 Visual Studio 或 FTP 应用程序的 Azure 应用服务 Web 应用程序平台和它进行测试。如何将部署到 Azure App Service Web 应用的详细的说明,请参阅 bit.ly/1nXnhmB。
软件即服务
在撰写本文时,我开始思考如何软件即服务 (SaaS) 以及此实时 HTML PDF 转换器是 SaaS 解决方案还是只需在云中运行的 API 访问应用程序。我决定,公开的 Azure web 作业 API,通过名称本身,使得 API 和不 SaaS。对于我的解决方案,web 作业 API 公开通过 URL,通过基本身份验证保护。API 可供其他使用者,若要在其基础上生成,或将功能添加到他们的应用程序,它是一个 API 的定义。但是,只要没有 api 使用者,围绕使其匹配 SaaS 的定义可由多个联机用户,使用 API 添加其他功能。因此,Azure web 作业 API 就是只需一个 API,我在 Azure 应用服务 Web 应用程序平台上运行的 ASP.NET SignalR 客户端时 SaaS 解决方案。确保它不是 OneDrive、 Office 365、 CRM Dynamics Online 或 Hotmail,但如果您需要将转换为 PDF 简略的 Web 站点,您知道从何处出现。
总结
本文探讨了三个 Azure 功能 ︰ 将 Azure App Service Web 应用;Azure 服务身份验证和授权;Azure 存储帐户和容器。这些功能都支持 Azure web 作业、 公开 Azure WebJob API 和托管 ASP.NET SignalR 基于浏览器的使用者的平台。我介绍了每个功能和对其进行配置所需的步骤。我还介绍了 Azure web 作业,Azure web 作业 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 应用程序服务。