Adoption Program Insights 系列描述了微软服务咨询的经验 (包含在Windows Azure Technology Adoption Program内,该项目旨在帮助客户开发Windows Azure平台上的解决方案)。这篇文章由Tom Hollander发表。
许多开发人员选择使用面向服务的技术来将大型系统分成更小的、松散耦合的服务。通常,每个服务将托管在不同的计算机上并使用WS-*的基于标准的通信协议。但是有时不同的托管和通信方法使其更有意义。例如,如果你控制服务和所有的客户端,使用二进制消息通过TCP发送可能使你获得更好的性能。在某些情况下,你可以选择将多台服务器托管在同一机器上并使用优化本地通信机制如命名管道,同时保持你的服务器之间的逻辑分离。
微软的应用程序平台一直使其易于支持所有的这些方案,应用程序代码很少或没有更改。Windows通信基础(WCF)通过多个消息传递协议提供了一个统一的编程模型,而Windows进程激活服务(WAS)允许你将服务托管在IIS中并通过由非HTTP发送输入报文包括TCP和命名管道来 “唤醒” 他们。
但是如果你已经决定利用Windows Azure部署你的应用程序,如何利用WAS就不明显了。但是好消息是,由于PowerShell的一点帮助,这个起作用是完全可行的。你需要写的脚本关键步骤是:
· 为你选择的协议启用并启动WAS激活服务
· 为你选择的协议添加绑定到IIS web站点
· 在你的web站点或应用程序上允许选择的协议
这篇博客描述了一个简单的应用程序,它由包含web站点(客户端)的一个单点web角色和托管WCF服务的一个虚拟应用程序组成。因为在客户端和服务器托管在同一机器上,我们将使用WCF的用来优化通信的NetNamedPipeBinding,虽然相同的基本方法也适用于NetTcpBinding。(注意Windows Azure上不支持MSMQ,因此你不能使用那些绑定)。我在帖子里列出了该解决方案的最主要的代码,你可以通过点击帖子底部的WasInAzure.zip文件来下载整个例子。
WCF 配置
对Azure来说关于WCF配置方面没有特殊的地方,但是为了更加完整我将展示其中一部分。我已经建立了一个简单的服务并用NetNamedPipeBinding 和net.pipe:// URL配置了一个终结点。
web.config (Service):
<system.serviceModel>
<services>
<service name="WcfService1.Service1">
<endpoint binding="netNamedPipeBinding" address="net.pipe://localhost/WcfService1/service1.svc" contract="WcfService1.IService1"/>
</service>
</services>
</system.serviceModel>
客户端的WCF配置看起来大致相同,使用匹配的ABC(地址、绑定和合同。)
Windows Azure 启动任务
当你想要在Windows Azure实例启动时执行一些脚本,通常你将在服务定义文件的<Startup>元素中定义的脚本中做所有的工作。不过这里定义的任务在组织配置IIS之前执行,结果是这根本不是做出WAS大部分所需修改的合适地方。所以我们在启动任务中需要做的是配置PowerShell,从而我们可以稍后再启动序列中运行我们的脚本:
ServiceDefinition.csdef:
<ServiceDefinition name="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
...
<Startup>
<Task commandLine="setup/startup.cmd" executionContext="elevated" />
</Startup>
</WebRole>
</ServiceDefinition>
Startup.cmd:
powershell -command "set-executionpolicy Unrestricted" >> out.txt
Windows Azure角色OnStart
WebRole 类OnStart方法的在IIS被组织装配之后执行,因此在这个时候我们自由运行所需更改配置的脚本。首先要注意的是通常OnStart方法不在管理员权限下运行——我们需要为使得我们的脚本起作用更改这个。
ServiceDefinition.csdef:
<ServiceDefinition name="WasInAzure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
<WebRole name="WebRole1">
...
<Runtime executionContext="elevated" />
</WebRole>
</ServiceDefinition>
现在,当角色启动时我们可以添加开始PowerShell脚本的代码:
WebRole.cs:
public class WebRole : RoleEntryPoint
{
public override bool OnStart()
{
var startInfo = new ProcessStartInfo()
{
FileName = "powershell.exe",
Arguments = @"./setup/rolestart.ps1",
RedirectStandardOutput = true,
UseShellExecute=false,
};
var writer = new StreamWriter("out.txt");
var process = Process.Start(startInfo);
process.WaitForExit();
writer.Write(process.StandardOutput.ReadToEnd());
writer.Close();
return base.OnStart();
}
}
最后,我们来看启动侦听服务和配置绑定的PowerShell脚本。关于此脚本有几点需要注意:
· 如果你正在使用TCP而不是命名管道,更改所有引用到net.pipe到net.tcp,更改绑定到包含你所选的端口(如“808:*”)。你还需要启用NetTcpPortSharing 和 NetTcpActivator 服务。
· 该脚本对角色名称做了一些假设并更改在所有IIS虚拟应用程序的协议。取决于你怎样设置你的角色和可能需要更改此设置的站点。
· 在怎样访问IIS 7.0和IIS 7.5的IIS PowerShell cmdlets有一些不同。我的脚本适用于IIS 7.5,其中包括在Windows Server 2008 R2 和Windows Azure 操作系统“2.x”族。若要获取此版本,请确保你在ServiceConfiguration.cscfg文件根节点下设置 osFamily="2"。或者如果你想要使用IIS 7.0 (Azure OS “1.x”) ,可以修改你的powerShell脚本来让这个起作用。
RoleStart.ps1:
write-host "Begin RoleStart.ps1"
import-module WebAdministration
# 启动net.pipe服务
$listenerService = Get-WmiObject win32_service -filter "name='NetPipeActivator'"
$listenerService.ChangeStartMode("Manual")
$listenerService.StartService()
# 绑定net.pipe
$WebRoleSite = (Get-WebSite "*webrole*").Name
Get-WebApplication -Site $WebRoleSite | Foreach-Object { $site = "IIS:/Sites/$WebRoleSite" + $_.path; Set-ItemProperty $site -Name EnabledProtocols 'http,net.pipe'}
New-ItemProperty "IIS:/Sites/$WebRoleSite" -name bindings -value @{protocol="net.pipe";bindingInformation="*"}
write-host "End RoleStart.ps1"
总结
正确配置Windows Azure服务定义和服务配置文件,最常见的配置任务无需任何编码或脚本即可获得。但是有一些有用的功能可以用来从非云端Windows安装使用,目前一般不这么做。幸运的是,如果你熟悉脚本技术和Windows Azure 启动序列,你可以通常的代码解决这些问题。有很多有用的特性,Windows Azure本身并未启用,Windows Process Activation Services就是一个很好的例子。我们可以通过一些努力来启用它。
本文翻译自:http://blogs.msdn.com/b/windowsazure/archive/2011/06/27/hosting-services-with-was-and-iis-on-windows-azure.aspx
分享到:
相关推荐
总之,在Windows Azure中托管和使用WCF服务,开发者可以利用云计算的强大功能,构建高效、可伸缩的应用。同时,Azure提供的管理和监控工具,以及灵活的扩展选项,为WCF服务的运维提供了便利。不过,要确保服务在...
Windows Azure 是由微软提供的公有云应用程序平台,在中国大陆区域的服务由世纪互联运营。该平台旨在为企业和个人开发者提供灵活、强大的云端资源,支持各类应用的构建、部署与管理。Windows Azure 提供的服务覆盖了...
Windows Azure 模拟器是 Windows Azure 平台提供的一种模拟工具,允许开发者在本地测试自己的应用程序是否能够在 Windows Azure 平台上运行。模拟器提供了仿真的云端环境,帮助开发者快速测试和调试自己的应用程序。...
- **应用场景**:设计一个托管在Windows Azure中的Web服务,该服务将接收并存储结构化和半结构化的数据。 - **功能需求**: - 在单一事务中更新所有数据。 - 强制执行结构化数据在数据存储中的结构。 - **推荐方案...
将带来Windows Azure平台的功能以及开发的方式等各式各样的信息,帮助您了解微软的云计算平台以及相关技术,或是评估微软的Windows Azure平台能力,以及如何在Windows Azure上开发应用程序的知识和技术。 全书共12章...
**Windows Azure** 提供了四种不同的服务级别,分别是“免费”、“共享”(预览)、“基本”和“标准”,每种级别都有其特定的功能和服务范围: 1. **免费级别**:适用于个人学习和初步尝试,提供有限的资源和功能...
在本文中,我们将深入探讨如何在Microsoft Windows Azure云服务平台上部署AS2连接器。AS2(Applicability Statement 2)是一种用于B2B(企业对企业)数据交换的标准,主要用于安全、可靠和有序地传输EDI(电子数据...
Windows Azure 概述
《Windows Azure实战》一书是针对云计算平台Windows Azure的实践指南,旨在帮助读者掌握如何在Azure平台上构建、部署和管理应用程序。这本书源自华章出版社,提供了丰富的实例和详细的操作步骤,使得读者能够深入...
通过以上介绍,我们了解了 Windows Azure 提供的主要服务、如何安装 SDK、如何使用 Visual Studio 2013 创建和管理 Windows Azure 网站以及 Service Bus 应用程序等内容。这些基础知识将有助于开发者在云环境中进行...
2. **性能监控**:利用 Windows Azure 提供的各种工具和服务(如 Azure Monitor)监控虚拟机的性能指标,如 CPU 使用率、内存使用情况等。 3. **自动扩展**:根据实际需求,可以配置自动扩展策略,当负载增加时...
综上所述,Windows Azure(Microsoft Azure)作为一种先进的公有云服务平台,不仅为企业提供了丰富的功能和服务,还帮助企业实现了业务转型和技术升级。无论是在中国市场还是全球范围内,Azure都展现出其独特的优势...
在中国,Windows Azure 运行在上海(中国东部)和北京(中国北部)两座主要城市的数据中心,这些数据中心达到了 T4 级别标准,不仅实现了异地灾难备份,而且提高了网络访问效率和数据业务的可靠性。在接入网络方面,...
Windows Azure,现在被称为Azure,是微软提供的一款全面的云计算平台,为企业和个人开发者提供了构建、部署和管理应用程序与服务的能力。它是一个综合性的云服务,包括计算、存储、数据库、网络、分析等众多功能,...
Windows Azure 平台由三个主要组件构成:Windows Azure(计算服务)、SQL Azure(数据库服务)和Windows Azure Storage(存储服务)。这三者协同工作,为企业提供灵活、可扩展且高可用的云环境。 1. Windows Azure...
Windows Azure 和 SQL Azure 以及 AppFabric 的计费细节会根据服务的不同而有所不同,但总体上,这种计费模式降低了初期投入,使得小企业和初创公司也能享受云计算带来的好处。 总的来说,Windows Azure 作为微软的...
首先,Windows Azure Pack是微软“Cloud OS”愿景的一部分,它提供了一系列技术和服务,能够使企业和服务提供商在自己的数据中心内部署云服务。这项技术不仅适用于企业,还适用于那些希望为自己的客户提供云服务的...
- **SQL Azure**:这是一个关系型数据库服务,允许用户在云中托管和管理SQL Server数据库。SQL Azure 支持多种数据库功能,如事务处理、备份和恢复等。 - **Windows Azure App Fabric**:提供了中间件服务,帮助...