三步完成Windows Azure平台部署WCF服务

之前,我们在Windows Azure平台简介中介绍过Windows Azure的三大主要功能。那就是计算,存储,以及管理。至今为止,通过之前的教学文章,大家已经熟知了Windows Azure的存储功能。当然,存储只是最基本的一个功能。要充分发挥云计算的威力,我们不得不学习如何“计算”。

  同样在Windows Azure平台简介中,我们也介绍了Windows Azure的三种主要计算功能:

  作为一个部署服务平台

  作为一个软件分发平台

  作为一个一般的分布式计算平台

  本文将引导大家达成第一种功能:在Windows Azure上部署服务。后续文章将会介绍另两种功能。事实上,在Windows Azure入门教学系列 (一): 创建第一个WebRole程序里,大家已经尝试过部署一个最简单的服务:一个ASP.NET网站。是的,ASP.NET网站也可以称作一种服务。现在,你的ASP.NET程序不再是运行在你自己的服务器上,而是运行在云端了。但是,Windows Azure不仅仅支持常规网站,我们也完全可以把那些和用户界面无关的服务(headless services)部署至云端。例如,WCF服务,WF工作流,等等。而也正是这些headless services,使我们的web site摇身一变成为了Web API,让用户可以使用任意大小的屏幕,在任意场合,使用他们喜欢的客户端,访问我们的服务。本文将会教导大家如何在Windows Azure上部署一个WCF服务,作为入门教学,我们将使用最简单的SOAP Service。

  如果你并不了解WCF,请自http://msdn.microsoft.com/en-us/netframework/aa663324.aspx开始学习。本文假设你已经了解了WCF的基础知识。

  前期准备

  想要在Windows Azure这样的负载平衡环境中使用WCF,首先必须下载一个hotfix。这个hotfix已经预装在云端的服务器上,但是如果你要在本地测试,还需要手工装到本机。这个hotfix解决了WCF的一些在负载平衡场合下可能出现的bug。

  创建并观察项目

  创建一个新的Cloud Service项目。选择添加一个WCF Service Web Role。

  在这个入门教学中,我们将使用最基本的,默认生成的代码。以下是默认生成的OperationContracts:

  [OperationContract]

  string GetData(int value);

  [OperationContract]

  CompositeType GetDataUsingDataContract(CompositeType composite);

  打开web.config,请注意默认生成的配置使用的便是basicHttpBinding。可是如果使用普通的WCF Service项目模板,你将会得到wsHttpBinding。注意wsHttpBinding默认使用Windows Authentication,在Windows Azure中Windows Authentication是不支持的,所以如果你使用普通的WCF Service项目模板,请记得修改wsHttpBinding的安全配置,或者改成使用basicHttpBinding。

  负载平衡带来的问题

  现在,运行项目,你会看到标准的WCF信息页面

  请注意WSDL文件的地址并不正确,我们的服务应该是运行在81端口上,但是该页面确报告WSDL文件位于端口5100。假设你点击上述链接,将会得到一个400 Bad Request错误。即使你强制在浏览器中输入http://127.0.0.1:81/Service1.svc?wsdl,你会发现虽然的确可以看到WSDL文件,但是生成的WSDL文件并不正确,包含一系列诸如 这样的链接。如果你尝试在一个客户端程序中add service reference,就会遇上错误了。

  以上,正是WCF默认的行为在负载平衡场合下会引发的问题。事实上,我们的服务的第一个实例(至少在本地模拟环境中)确实运行在端口5100上,如果你的Web Role有多个实例,第二个实例很可能会运行在端口5101上。但是负载平衡器对外暴露的端口永远是你在csdef文件中指定的端口(当然在本地因为80端口已经被IIS占用,不得不使用81端口)。WCF默认并不知道负载平衡器,所以它还是认为客户端必须访问端口5100。

  解决负载平衡带来的问题

  之前我们提到过WCF团队已经研发了一个hotfix,用于解决负载平衡带来的问题。但是为了发挥该hotfix的功效,必须做一点配置。

  首先,在web.config中找到服务的service behavior,并且添加一个名为useRequestHeadersForMetadataAddress的behavior。这个行为是通过hotfix安装的。

<behavior name="WCFServiceWebRole1.Service1Behavior">

<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->

<serviceMetadata httpGetEnabled="true"/>

<!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->

<serviceDebug includeExceptionDetailInFaults="false"/>

<!-- 启用hotfix解决负载平衡造成的端口不正确问题。 -->

<useRequestHeadersForMetadataAddress>

<defaultPorts>

<add scheme="http" port="80" />

<add scheme="https" port="443" />

</defaultPorts>

</useRequestHeadersForMetadataAddress>

</behavior>

  

  再有,在负载平衡场合,客户端所请求的地址往往和服务所部署的真正地址是不同的。因此我们推荐大家将AddressFilterMode设置成Any,从而不再检查地址匹配性。

  [ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

  public class Service1 : IService1

  现在,再次运行程序,你会看到端口81已经被成功识别出来。

  将Web Role部署至云端

  请参考http://blogs.msdn.com/azchina/archive/2010/02/18/webrole.aspx将Web Role部署至云端,这个过程是完全一致的,不管你使用ASP.NET,使用WCF,或者使用其它技术。本文不再重复。

  现在,你可以尝试在本地构建一个客户端程序访问刚发布的服务,不过本文就不再详细介绍如何访问服务了。再下一篇文章中,我们将会从云端分发一个软件,并且让那个软件和我们的服务交互,协同工作。

  总结

  你可以在Windows Azure上部署任意服务,而为了充分发挥云计算的威力,我们往往不仅仅需要使用诸如ASP.NET之类的技术制作的web site,更需要使用诸如WCF之类的技术制作的Web API,从而真正地通过云,将所有种类的客户端连接起来。

  在Windows Azure中使用WCF和在一般场合下使用WCF非常类似,但是我们必须注意负载平衡可能带来的问题,并做好应对方案。

时间: 2024-11-08 18:27:46

三步完成Windows Azure平台部署WCF服务的相关文章

在Windows Azure上部署WCF服务

本文将引导大家达成第一种功能:在Windows Azure上部署服务.后续文章将会介绍另两种功能.事实上,在Windows Azure入门教学系列 (一): 创建第一个WebRole程序里,大家已经尝试过部署一个最简单的服务:一个ASP.NET网站.是的,ASP.NET网站也可以称作一种服务.现在,你的ASP.NET程序不再是运行在你自己的服务器上,而是运行在云端了.但是,Windows Azure不仅仅支持常规网站,我们也完全可以把那些和用户界面无关的服务(headless services)

在Windows Azure平台上部署服务

简介之前,我们在Windows Azure平台简介中介绍过Windows Azure的三大主要功能.那就是计算,存储,以及管理.至今为止,通过之前的教学文章,大家已经熟知了Windows Azure的存储功能.当然,存储只是最基本的一个功能.要充分发挥云计算的威力,我们不得不学习如何"计算". 同样在Windows Azure平台简介中,我们也介绍了Windows Azure的三种主要计算功能: 作为一个部署服务平台 作为一个软件分发平台 作为一个一般的分布式计算平台 本文将引导大家达

Windows Azure新增功能备份服务正式发布

今天上午,我们发布了Windows Azure的一系列更新.这些新功能包括: •备份服务:正式发布的Windows Azure备份服务 •Hyper-V的恢复管理器:Windows Azure中的Hyper-V恢复管理器的公开预览版 •虚拟机:删除连接的磁盘,可设置警告,SQL AlwaysOn的配置 •Active Directory:安全地管理数百个SaaS应用 •企业管理:使用Active Directory来更好地管理Windows Azure •Windows Azure SDK 2.

《微软云计算Windows Azure开发与部署权威指南》——第6章 Windows Azure平台访问控制与总线AppFabric6.1 服务导向架构

第6章 Windows Azure平台访问控制与总线AppFabric 6.1 服务导向架构 微软云计算Windows Azure开发与部署权威指南什么是SOA(Service-Oriented Architecture,服务导向架构)?SOA的理念广为人知,然而其概念解释又有多种版本.本书认为SOA是为了满足组织机构的商业需求而建立的松耦合的体系结构. 需要读者注意的是,SOA注重架构而不是实现,它不是一门技术,而是一门设计哲学,很多人将面向服务的架构和面向服务的实现混淆.SOA并不强调实现的

怎样在Windows Azure中部署应用程序

这篇文章,我们主要围绕怎样在Windows Azure中部署应用程序这个来开展,想要在Azure中部署应用程序,说简单不简单,说难也不难,不过有两个文件是必需的:一个包文件,另一个则是配置文件.要创建包文件,可以在CloudService项目上"右击",然后点击"Publish".它会询问你是创建一个包文件还是把它发布到Azure中.如果选择第一个选项,它会创建包文件,并打开这个浏览器.而第二个配置文件则在CloudService1中,叫作ServiceConfig

预构建Linux映像在Windows Azure中部署多节点Hadoop群集

本文章由 http://www.aliyun.com/zixun/aggregation/13357.html">Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 随着基础结构服务(虚拟机和虚拟网络)近期在 Windows Azure 上正式发布,越来越多的企业工作负荷正在向公共云迁移,以利用云经济效益.规模和速度.我最近参与了其中一种企业工作负荷 - 云中的大数据.在此,我将与您分享一些提示和最佳做法. 该项目要求使用预构建 Linux 映像在 Windows

微软Windows Azure平台资源汇总

入门云计算简介 了解云计算的一般概念. Windows Azure平台简介 开始认识Windows Azure平台. Windows Azure入门教学系列 学习Windows Azure平台的基础知识. Windows Azure Platform Training Kit 学习Windows Azure平台的基本任务. "How Do I"系列教学电影 以可视化的方式学习Windows Azure平台. 工具Windows Azure SDK Windows Azure platf

使用Windows Azure 创建的云服务系统是Centos 6.5的,求根用户密码是什么

问题描述 使用Windows Azure 创建的云服务系统是Centos 6.5的,求根用户密码是什么 使用Windows Azure 创建的云服务系统是Centos 6.5的,求根用户密码是什么 解决方案 在创建虚拟机的时候你可以指定root密码,如果你忘记了,即便你联系客服,客服也帮不了你.你只能重装系统了. 解决方案二: 您好,我同意上面的观点.对于Windows操作系统版本的Azure虚拟机而言,你在创建虚拟机的时候可以安装VM代理,通过VM代理来修改管理员密码.但是目前从 Linux

Windows Azure 中的加密服务和数据安全

Windows Azure 平台的许多早期采用者仍对平台安全及其加密支持存在大量疑问.在此,我将介绍 Windows Azure 平台内加密和相关安全的一些基本概念.详细阐述本主题可能需要很大的篇幅,因此我只打算说明并重温一下 Windows Azure 中的某些加密服务和提供程序.任何向 Windows Azure 的过渡也会存在一些安全隐患. 对于任何新平台或服务交付方法,您都会面临新的挑战.另外还要提醒您,一些典型问题仍然存在,甚至您过去使用的一些相同的解决方案仍将有效.任何应用程序工程师