导出 (0) 打印
全部展开

中国 Azure 应用程序的开发人员注意事项

更新时间: 2014年11月

本部分内容:

Microsoft 提供多种工具来创建云应用程序并将其部署到 Microsoft 全球 Microsoft Azure 服务(简称“全球服务”)。

中国 Microsoft Azure(简称“中国服务”)是由中国公司 21Vianet 运行和提供的 Microsoft Azure 服务的单独实例,其数据中心位于中国大陆境内(不含香港、澳门和台湾)。因此,在创建和部署完全不同于“全球服务”的应用程序时,开发人员需要了解这两种服务的主要区别,以便正确设置其编程环境、编写应用程序并将它们作为在中国托管的服务部署。

本文档中的信息总结了这些区别,是对中文 Azure 门户和 MSDN 上的 Azure 技术库所提供的信息的补充。官方信息也可以在许多其他位置(如 Azure 海报TechNet wiki 以及 Microsoft 员工的各种博客文章)中获得。此内容适用于在中国部署到在中国托管的数据中心的合作伙伴和开发人员。

有关中国服务的功能可用性的最新更新,请访问中国 Azure 门户。有关 Azure 上的当前内容资产的列表,请参阅本文档中的附录。

由于当前可从 Microsoft 获得的大部分英文技术内容假定要开发的应用程序用于全球服务,而不是用于中国服务,因此请务必确保开发人员了解开发后需要在中国托管的应用程序的主要区别。

首先是存在功能差异,这意味着全球服务中的某些功能在中国不可用。

其次就是在中国提供的功能存在运行差异,这意味着若要使用公开提供的英语内容(是为全球服务编写的),需要自定义所有示例代码和步骤。

目前,中国服务中包括以下 Azure 功能。

  • 计算 - 虚拟机(用于 IaaS 服务)

  • 计算 - 云服务(用于 PaaS 服务)

  • 计算 - 网站

  • 数据服务 - 存储(用于 Blob、表和队列)

  • 数据服务 - SQL Database

  • 数据服务 - HDInsight

  • SQL Database - SQL 导入/导出网络 - 虚拟网络(通过本地网络在云服务之间进行通信)

  • Service Bus

  • Active Directory

  • 访问控制服务 - 具有自己的 UI 和命名空间

  • 缓存 - 仅支持专用缓存

  • 移动服务

  • Media Service

  • CDN

  • Traffic Manager

下图显示现在的中国服务提供的组件。

在中国提供的 Azure 功能

目前,中国服务中不包括以下 Azure 功能。

  • ACS 命名空间

  • 数据服务 - SQL Reporting

  • 数据服务 - SQL 数据同步

  • SQL Database 管理门户

Azure 中的托管服务由一个应用程序(用于在托管服务中运行)和 XML 配置文件(定义托管服务的运行方式)组成。托管服务同时使用服务定义文件 (.csdef) 和配置文件 (.cscfg)。有关详细信息,请参阅创建 Azure 托管服务概述

在中国服务中开发托管服务时的主要区别是终结点地址有不同的 URI。例如,Azure 和 SQL Database URI 通常以 windows.net 结尾。中国服务开发人员必须能够认识到何时 URI 终结点不同,然后配置所用的工具和所开发的应用程序以根据需要对这些不同的终结点使用 URI。

需要更改终结点 URI 时的示例:

  1. 配置 Visual Studio

  2. 定义 SQL Database 的连接字符串

  3. 定义 Azure 存储空间的连接字符串

  4. 在 Azure 计算中定义端口通信。

  5. 使用服务管理 API

  6. 将 URL 从自定义域名重定向到托管服务

  7. 为 HTTPS 终结点颁发证书

  8. 使用 Azure 诊断,该功能使用 Azure 存储空间

  9. 使用用于在 Azure 上运行、具有自己的配置文件或服务定义文件的工具和服务

  10. 使用 CSUPLOAD 工具上载 VM 角色的映像

使用下表指导你将公共 Azure 和 SQL Database 终结点映射到中国特定的终结点。

 

服务类型 全局服务 URI 中国服务 URI

Azure - 常规

*.windows.net

*.ch *.chinacloudapi.cn

Azure 计算

*.cloudapp.net

*.chinacloudapp.cn

Windows Azure 存储

*.blob.core.windows.net

*.queue.core.windows.net

*.table.core.windows.net

*.blob.core.chinacloudapi.cn

*.queue.core.chinacloudapi.cn

*.table.core.chinacloudapi.cn

Azure 服务管理

https://management.core.windows.net

https://management.core.chinacloudapi.cn/

SQL Database

*.database.windows.net

*.database.chinacloudapi.cn

Azure 管理门户

http://manage.windowsazure.com

http://manage.windowsazure.cn

SQL Azure 数据库管理 API

https://management.database.windows.net

请参阅关于 SQL Azure 数据库管理 API

https://management.database.chinacloudapi.cn

Service Bus

*.servicebus.windows.net

*.servicebus.chinacloudapi.cn

SQL Database 导入/导出服务映射终结点

  1. 中国东部:https://sh1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc

  1. 中国北部:https://bj1prod-dacsvc.chinacloudapp.cn/dacwebservice.svc

目前有两个由中国服务运行的数据中心。这两个数据中心在“位置”字段中分别显示为“中国北部”和“中国东部”。

当你准备好发布应用程序时,请打开 Azure 项目的快捷菜单,然后选择“发布”。下图显示了发布 Azure 应用程序向导。

  1. 从“发布 Azure 应用程序”向导的“选择订阅”下,选择<管理...>,然后选择“新建”。

    发布 Azure 应用程序
  2. 在“新建订阅”窗口中:

    1. 选择要用于身份验证的证书。可以选择现有证书或创建一个新证书。

    2. 使用管理门户 (http://manage.windowsazure.cn) 在“设置”部分将此证书上载到你的帐户。

    3. 从门户复制订阅 ID

    4. 输入 https://management.core.chinacloudapi.cn 作为服务管理 URL。

    5. 指定订阅的名称。

      新建订阅

  1. 在“云服务”列表中,执行以下步骤集之一:

    • 选择一个现有服务。随即将显示此云服务的数据中心位置。请记下此位置,确保存储帐户的位置在同一个数据中心内。

    • 选择“新建”以创建 Azure 托管的云服务。在“创建 Microsoft Azure 服务”对话框中,指定服务的名称,然后指定“中国北部”作为数据中心。

  2. 在“环境”列表中,选择“生产”或“过渡”。如果要将应用程序部署到测试环境中,请选择暂存环境。稍后可将应用程序移到生产环境。

  3. 在“生成配置”列表中,选择“调试”或“发布”。

  4. 在“服务配置”列表中,选择“云”。

  5. 选中“为所有角色启用远程桌面”复选框以启用远程桌面。此选项主要用于故障排除。当选中此复选框时,将显示“远程桌面配置”对话框。选择“设置”链接以更改配置。

    选中“为所有 Web 角色启用 Web 部署”复选框以启用 Web 部署。你必��启用远程桌面方可使用此功能。有关详细信息,请参阅使用 Azure Tools 发布云服务。有关 Web 部署的详细信息,请参阅使用 Azure Tools 发布云服务

    Azure 发布设置
  6. 选择“高级设置”选项卡。在“部署标签”字段中,接受默认名称,或者输入你选择的名称。要将日期追加到部署标签,请保留选中的复选框。

  7. 在“存储帐户”列表中,选择要用于此部署的存储帐户。比较云服务和存储帐户各自所在数据中心的位置。理想情况下,这些位置应该是相同的。

    Azure 发布设置 02
  8. 如果只想部署已更新的组件,请选中“部署更新”复选框。此部署类型的速度比完全部署快。选择“设置”链接以打开“部署更新设置”对话框,如下图所示。

    Azure 部署设置
    对于“增量”和“同时”这两个更新部署选项,你可以任选一个。增量部署是一次更新一个已部署的实例,以便应用程序保持联机状态,对用户可用。同时部署是一次更新所有已部署的实例。同时更新的速度比增量更新要快,但如果选择此选项,那么应用程序在更新过程中可能会不可用。

    如果希望在更新部署失败时自动进行完全部署,应选中“如果部署无法更新,则执行完全部署”复选框。完全部署将重置云服务的虚拟 IP (VIP) 地址。有关详细信息,请参阅如何:为云服务保留不变的虚拟 IP 地址

  1. 可以从你选择的设置中创建发布配置文件。例如,你可以有一个配置文件用于测试环境,另一个用于生产。若要保存此配置文件,请选择“保存”图标。该向导的作用是创建配置文件并将其保存在 Visual Studio 项目中。

    Azure 发布摘要
    note备注
    该发布配置文件将出现在 Visual Studio 的“解决方案资源管理器”中,并且该配置文件设置将写入带 .azurePubxml 扩展名的文件。设置保存为 XML 标记的属性。

  2. 选择“发布”可发布应用程序。你可以在 Visual Studio 的“输出”窗格中中监视进程状态。

修改现有项目时,请在项目中搜索在服务定义文件或配置文件中指向 Azure、SQL Database URI 的终结点 URI。

应将指向 *.windows.net 的终结点重定向到中国的新 URI。下面列出了几个示例。

必须使用自定义存储终结点。默认设置指向 *.core.windows.net。* 因应用程序和存储位置而异。

在 Azure 应用程序的 Azure 服务配置文件 (.cscfg) 中,设置指向中国服务中的 Blob、队列和表存储 URI 的自定义数据连接字符串。以下代码显示了一个自定义终结点的示例,其中 <AccountKey> 是一个变量,必须替换为特定的存储帐户密钥。字符串 mystorageaccount 是在订阅下创建的存储帐户的示例。

<Setting name="DataConnectionString" value=
"BlobEndpoint=https://mystorageaccount.blob.core.chinacloudapi.cn/;QueueEndpoint=https://mystorageaccount.queue.core.chinacloudapi.cn/;TableEndpoint=https://mystorageaccount.table.core.chinacloudapi.cn/;AccountName=mystorageaccount;AccountKey=<AccountKey> " />

请注意,自定义存储终结点不包括 DefaultEndpointsProtocol 设置。通常可以在指向公共版本 Azure 的存储终结点的连接字符串中找到此设置。

Visual Studio 也提供了一个选项,用于在“设置”部分为给定角色创建自定义存储终结点。

  1. 打开包含一个或多个角色的 Azure 解决方案。

  2. 右键单击解决方案资源管理器中的任何角色。此时将显示该角色的配置。

  3. 单击“设置”

  4. 单击“添加设置”

  5. 为设置键入名称

  6. 选择连接字符串类型

  7. 单击 ... 以显示“存储帐户连接字符串”对话框。

  8. 选择“输入存储帐户凭据”

  9. 输入正确的存储帐户名称和密钥。

  10. 选择“使用自定义终结点”,然后为 Blob、表和队列终结点输入适当的 https 字符串。

  11. 单击“确定”。

Visual Studio 将在服务配置文件中创建自定义存储终结点。你可以在角色中通过代码使用此存储终结点。

以下代码显示如何使用特定于中国服务的自定义 URI 以编程方式连接到存储帐户。

CloudStorageAccount Account = new CloudStorageAccount( 
new StorageCredentialsAccountAndKey(ACCOUNTNAME, ACCOUNTKEY), 
new Uri("http:// ACCOUNTNAME.blob.core.chinacloudapi.cn/"), 
new Uri("http:// ACCOUNTNAME.queue.core.chinacloudapi.cn/"), 
new Uri("http:// ACCOUNTNAME.table.core.chinacloudapi.cn/")
);
CloudBlobClient BlobClient = Account.CreateCloudBlobClient();

端口绑定也使用以 *.cloudapp.net 结尾的 DNS 名称。你必须将这些 DNS 名称更改为指向 *.chinacloudapp.cn。下面显示了包含端口声明的服务定义文件部分。

<Sites>
   <Site name="MySite" physcalDirectory="..\WebSite1">
      <Bindings>
        <Binding name="My" endpointName="HttpIn" hostHeader="WebSite1.mysite.Chinacloudapp.cn" /> 
      </Bindings>
   </Site>
   <Site name="Web">
      <Bindings>
         <Binding name="HttpIn" endpointName="HttpIn" />
      </Bindings>
   </Site>
</Sites>

有关详细信息,请参阅如何配置 Azure 端口

SQL Database 服务器名称将从 *.database.windows.net 更改为 *.devdatabase.chinacloudapi.cn。任何客户端应用程序或工具的用于连接到数据库的连接字符串必须使用新名称。对 SQL Database 服务器的引用可以是服务定义文件中的 DataConnectionString 值,也可以是未在中国服务中运行的应用程序的其他 .NET 配置文件中的值。例如,

<configuration>
  <connectionStrings>
    <add name="SQLAzure" connectionString="Server=tcp:yourserver.devdatabase.chinacloudapi.cn;
Database=Test;User ID=login@server;Password=yourPassword;
Trusted_Connection=False;Encrypt=True;"/>
  </connectionStrings>
</configuration>

Microsoft Azure Active Directory(简称“Microsoft Azure AD”)为本地和云应用程序提供标识和访问功能。开发人员可以使用 Azure AD 功能为企业应用程序和软件即服务 (SaaS) 提供商实现单一登录和单一注销,使用 Graph API 查询和管理云目录对象,并与本地 Active Directory 集成以将目录数据同步到云。

Azure Active Directory 包含在由中国服务运行的 Azure 中。但是,按照设计,有几项差异影响开发人员体验。本文将说明这些差异。

中国服务是一个自定义产品,与全球服务共享许多功能。自定义导致以下差异影响使用 Azure AD 的开发人员。

  • “访问控制”命名空间不可用。若要将应用程序与 Azure 标识服务集成并将目录与该服务同步,请使用 Azure Active Directory。在 Azure 管理门户中,单击 Active Directory

  • ACS 管理门户只可用于 Service Bus 命名空间。

  • 尚不支持预览本机应用程序和服务器到服务器方案的 OAuth 2.0 授权代码授予类型。

除了这些自定义设置外,中国服务中的 Azure AD 设计为与全球服务相同。

note备注
在预览由中国服务运行的 Azure 期间创建的“访问控制”命名空间是既不可操作也不可访问的。但是,类似功能在 Azure 管理门户的 Active Directory 部分中提供。

可以使用以下方法之一将使用 Service Bus 的应用程序重定向到特定终结点;

选项 1:使用环境变量重定向单个或所有应用程序。

选项 2:使用 ServiceBus.config 文件重定向单个应用程序。

选项 3:使用 ServiceBus.config 文件重定向所有应用程序。

如果你运行的是 EXE 文件或辅助角色,则上述任一选项均适用。如果你使用的是 Web 角色,则只有选项 3 适用。

无论使用哪种方法,终结点名称都将更改,如下表所示。

 

Service Bus 终结点 中国 Service Bus 终结点中的等效 Azure

servicebus.windows.net

servicebus.chinacloudapi.cn

accesscontrol.windows.net

accesscontrol.chinacloudapi.cn

  1. 考虑在哪个级别设置变量。为整个计算机、某个用户或运行单个应用程序的环境设置环境变量将会有不同的影响。

  2. 在适当的级别设置以下环境变量:

    RELAYHOST=servicebus.chinacloudapi.cn
    STSHOST=accesscontrol.chinacloudapi.cn 
    RELAYENV=Custom
    
Warning警告
在 csdef 文件中通过 <environment> 标记为 Web 角色添加环境变量时,此选项将不适用。Web 角色在 w3wp.exe 的上下文中运行。环境变量无法传播到 w3wp.exe 环境。有关 Web 角色,请参阅选项 3:

  1. 使用包含相应主机信息的以下内容创建 ServiceBus.config 文件。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <Microsoft.ServiceBus>
        <relayHostName>servicebus. chinacloudapi.cn</relayHostName>
        <stsHostName>accesscontrol. chinacloudapi.cn</stsHostName>    
      </Microsoft.ServiceBus>
    </configuration>
    
  2. 将 ServiceBus.config 文件放在 Service Bus/ACS 应用程序的 exe 文件所在的目录中。

    此选项对于 Web 角色不适用,因为 Web 角色在 w3wp.exe 的上下文中运行。因此,系统将在 %Windir%\System32\inetsrv\ 中查找 servicebus.config 文件,而该文件夹中并不存在该文件。

  1. 在 .NET Framework 配置目录中查找现有的 ServiceBus.config 文件。.NET Framework 配置目录取决于操作系统版本是 32 位还是 64 位以及已安装的 Framework 版本,以下是典型位置。

     

    Microsoft .NET Framework 版本 操作系统版本 目录

    2.0 到 3.5

    32 位

    %Windir%\Microsoft.NET\Framework\v2.0.50727\CONFIG

    2.0 到 3.5

    64 位

    %Windir%\Microsoft.NET\Framework64\v2.0.50727\CONFIG

    4.0

    32 位

    %Windir%\Microsoft.NET\Framework\v4.0.30319\Config

    4.0

    64 位

    %Windir%\Microsoft.NET\Framework64\v4.0.30319\Config

  2. 如果目录中有现有的 ServiceBus.config 文件,则必须编辑该文件以添加选项 2(使用 ServiceBus.config 进行单个重定向)所述的 XML 配置。如果添加该配置会与现有 ServiceBus.config 文件中的已有信息冲突,则不能使用此选项。必须使用选项 1 或 2。

除非你知道角色使用哪个 Framework,否则将无法定向到特定 Framework 目录。但是,以下脚本概括了 Web 角色的复制过程。它将 servicebus.config 文件复制到每个 .NET 目录(如果存在)。

@echo off
pushd .
cd %windir%\Microsoft.Net\Framework64\
REM set copylocal=true on servicebus.config so its present in bin dir
for /f %%i in ('dir /s /b config') do copy /y %~dp0servicebus.config %%~fi
popd

使用服务管理 API,开发人员可以管理 Azure 中运行的托管服务的部署。实际上,用于全球服务和中国服务的管理门户都使用服务管理 API。

全球服务使用路径 https://management.core.windows.net。为中国服务编写代码的开发人员应使用路径 https://management.core.chinacloudapi.cn

有关详细信息,请参阅对服务管理资源进行寻址关于服务管理 API

如果你使用的是转发到全球服务中运行的托管服务的自定义域名,并且将该托管服务移到中国服务,则必须将转发的域更新为指向新的中国特定的终结点。

例如,如果要将 www.contoso.com 重定向到在 contoso.cloudapp.net 运行的 Web 角色,则现在必须将它重定向到 contoso.chinacloudapp.cn。有关详细信息,请参阅如何为 Azure 托管服务配置自定义域

使用 VM 角色时,请将 csupload 终结点更改为使用中国特定的 URI。例如:

csupload Set-Connection"SubscriptionId=<subscriptionId>;CertificateThumbprint=<certThumbprint>;ServiceManagementEndpoint=https://management.core.chinacloudapi.cn"

以下是工具和示例以及在中国服务中运行它们所需的更改的部分列表。

开发人员应确定引用全球服务计算 (*.cloudapp.net) 或存储终结点 (*.core.windows.net) 的内部工具或应用程序,并将它们更新为使用中国特定的终结点。使用“终结点映射”中的表作为指南,替换可能会在这些工具的配置文件或代码中找到的各种字符串。

一些示例包括存储资源管理器工具以及存储上载和下载工具。在本节中列出了一些工具,但列表并不全面。

可以使用 Visual Studio 中的服务器资源管理器浏览所有中国订阅的计算、Service Bus、存储和虚拟机资源。当用户导入发布设置文件时,Visual Studio 将获取中国存储终结点。

Azure Tools for Visual Studio 入门中提供的过程可指导你完成创建 Azure Hello World 应用程序、对其进行编译和调试,然后使用服务器资源管理器将其上载并进行查看的整个过程。在将中国订阅导入 Visual Studio 后,这些说明适用于中国安装。

你还可以查看已存在于中国的 Azure 上但尚未使用 Visual Studio 进行部署的计算、Service Bus、存储或虚拟机资源。根据使用 Azure 计算资源管理器查看 Azure 应用程序的状态中的说明,查看已在中国服务中运行的一个或多个托管服务的状态。根据使用 Azure 存储资源管理器浏览存储资源中的说明,查看中国服务中运行的现有存储帐户中的对象。

csmanage 示例(最近重命名为“Azure ServiceManagement 示例”)使用服务管理 API。此示例包含指向全球服务的代码。你必须查找对 http://*.windows.net 的引用并将该引用更新为指向 *.chinacloudapi.cn。你可以在服务管理示例中下载 csmanage 示例。

在中国运行 PlainHttp 示例时,需要对该示例中的 URL 进行几个更新。使用以下步骤来更新示例。

  1. 打开此示例的根文件夹:WindowsAzureAppFabricSDKSamples_V1.0-CS\ServiceBus\ExploringFeatures\MessageBuffer\PlainHttp

  2. 导航到 MessageBufferClient 子文件夹并编辑 MainPage.xaml.cs

  3. windows.net 的所有实例更改为 *.chinacloudapi.cn。请参见第 31、77 和 98 行。

Azure 诊断使用开发计算机上的本地存储或中国服务存储帐户来存储诊断信息。有关详细信息,请参阅使用 Azure 诊断收集日志记录数据

例如,你的代码可以包含以下行:

DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");

你的 servicedefinition.cscfg 文件中可以包含以下配置信息。

<ConfigurationSettings>
  <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="<YourStorageString>" />
</ConfigurationSettings>

<YourStorageString> 是一个自定义终结点,包含中国服务的 URI。

使用自定义域名时,不需要对证书进行任何更改。

如果任何现有应用程序使用 HTTPS 终结点并且证书已绑定到 https://*.cloudapp.net(其中 * 是服务的名称),则必须为 *.chinacloudapp.cn 重新颁发这些证书。在中国部署服务时,必须使用这些新证书。

若要对中国服务使用 Windows PowerShell,请在 <用户>\AppData\Roaming\Windows Azure Powershell\ 下打开 PublishSettings.xml 文件,并在该文件中设置正确的终结点。

若要将该 SDK 用于中国服务,请通过管理门户或 CLI 提供连接字符串。

存储、Service Bus 和通知中心

所有这些均接受各自的连接字符串,你可以通过管理门户或 CLI 来获取值。

var tableService = azure.createTableService(storageConn);
var blobService= azure.createBlobService(storageConn);
var queueService = azure.createQueueService(storageConn);
var serviceBusService = azure.createServiceBusService(sbConn);
var notificationHubService = azure.createNotificationHubService(nhConn);

SQL

若要管理 SQL Database 服务器,请使用以下配置:

var sqlManagementService = azure.createSqlManagementService(subscriptionId, authentication, hostOptions);

下面列出了当前可用于 Azure 的所有内容资产,并指示该资产是否是专门讨论中国服务的。

 

资产 内容是专门为中国创建的 说明

windowsazure.com

Azure 全球门户。

windowsazure.cn

专为在中国运营的 Azure 构建的门户

在全球范围进行 Azure 案例研究

https://www.windowsazure.com/en-us/home/case-studies/

在中国进行 Azure 案例研究

http://windowsazure.cn/zh-cn/home/case-studies/

P&P 系列丛书

这些书是从全球发行的 P&P 丛书翻译过来的,针对全球服务。

MVP 编写的书

MSDN 库

是/否

http://msdn.microsoft.com/zh-cn/library/windowsazure/dd179367.aspx

Azure 团队博客

是/否

http://blogs.msdn.com/b/azchina/

MSDN Azure 门户

http://msdn.microsoft.com/zh-cn/ff380142

MSDN 杂志

虚拟实验室

视频

第 9 频道上的视频都是讨论全球服务的,此处 (http://www.youku.com/playlist_show/id_19321941.html) 的中国优酷视频也是如此

Azure 培训工具包

Github 中的已本地化培训工具包用于全球服务

MSDN 代码库

http://code.msdn.microsoft.com/windowsazure/

Github

在该处我们只托管 windowsazure.com 的英文内容,而没有已本地化的内容

Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2014 Microsoft