在WindowsAzure中实现和调试一个WCF服务(上)

在Windows Azure中实现和调试一个WCF服务(上)

原创
作者:编译/周雪峰 2011-03-15 15:43:39
云计算 为了把在Windows Azure中运行的,使用强大的WCF框架的服务暴露出来,Windows Azure提供了一个WCF角色。无论在哪个框架和平台上构建复杂的,具有高度可扩展性的系统,通过它们的功能进行逻辑分组,针对那些分组来抽象代码,并且分别执行它们,都是一种简单而高效的扩展性策略。

创新互联专注于企业成都全网营销推广、网站重做改版、肃北网站定制设计、自适应品牌网站建设、H5网站设计成都商城网站开发、集团公司官网建设、外贸网站制作、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为肃北等各大城市提供网站开发制作服务。

为了把在Windows Azure中运行的,使用强大的WCF框架的服务暴露出来,Windows Azure提供了一个WCF角色。无论在哪个框架和平台上构建复杂的,具有高度可扩展性的系统,通过它们的功能进行逻辑分组,针对那些分组来抽象代码,并且分别执行它们,都是一种简单而高效的扩展性策略。你应该把用来“绘制图形”的可执行代码分成一组,然后找出图形绘制服务的瓶颈,通过增加负责这个任务的Windows Azure实例的数量,你可以集中更多的计算能力来完成这个任务。

Windows Communication Foundation (WCF)是一种被广泛使用的客户端/服务端通信技术,它是由微软提供的,而且已经很成熟了。一个WCF服务可以和一个WCF客户端进行通信,也可以和采用了同样的标准的其他框架的客户端进行通信。本文主要为您讲述在Windows Azure中创建和使用WCF角色的基础知识,以及如何诊断发生在WCF服务内部的错误。除此之外,本文还会为您讲述在把Windows Azure的WCF跟踪信息记录到日志中的过程中,会遇到哪些已知的问题,以及这些问题的基本解决方法。另外,我们会提供相关的源代码。

首先,我们必须创建一个全新的,使用Windows Azure SDK v1.3的Windows Azure项目,然后给它添加一个新的WCF角色。这个角色是由Visual Studio来创建的,它带有很多有用的基础设置和服务。值得注意的是,创建一个WCF服务并不是***的方法,你也可以使用Web角色或者Worker角色(甚至是一个VM角色!)。但是,如果我们创建了一个使用WCF角色模板的服务,事情会变得更加容易一些。另外,这一点也应该引起我们的注意:使用WCF角色和使用Web角色没有什么本质区别,如果你使用的是Worker角色,那么情况就有所不同了。区别在于WCF角色和Web角色都是在IIS中托管WCF服务的,而使用Worker角色的时候,你只能在Windows应用程序中自托管。这方面的具体信息,可以参考:http://msdn.microsoft.com/en-us/library/ms730158.aspx。

让我们回到我们手头的任务上来,为我们的项目创建一个“WCF Service Web Role”:

这会创建一个Web应用程序(类似于Web角色),而且还会添加一些基础的代码文件。

这些是一个非常基础的WCF服务的基本组成部分,现在我来详细说明一下它们都是做什么的。如果你已经是一个WCF方面的老手了,可以跳过这个小节!

AzureLocalStorageTraceListener.cs:

这是“XmlWriterTraceListener”的一个派生类,“XmlWriterTraceListener”类的主要功能是收集“System.Diagnostics.Trace”类写入的日志信息,然后通过Xml的形式来输出它们。这是一个具有特定用途的“XmlWriterTraceListener”——它总是把基于XML的Trace信息写入到LocalStorage的一个区域中。Windows Azure允许一个角色对磁盘的可写区域进行写入操作。用这种特定的方式可以写入文件路径,以便于让Windows Azure Diagnostics框架知道从什么地方选择文件。Windows Azure Diagnostics框架必须要把它们移动到一个角色实例的本地实例中,以便于它们可以跨实例来使用。

IService1.cs:

这个文件包含一个接口和一个类。它们都很有意思,因为它们的定义都是用特性(attribute)来修饰的。“IService1.cs”中的接口是用特性[ServiceContract]来修饰的——这意味着在这个应用程序中,这个接口定义了一个服务契约。它可以用于WCF,表示客户端和服务端都同意可以在这个服务上使用某些方法,在内部,这些方法是用OperationContract]来修饰的。IService1.cs中的类是用特性[DataContract]来修饰的,它的成员是用特性[DataMember]来修饰的——这为指定客户端和服务端都同意的,可以在客户端和服务端之间进行传递的消息的细节提供了一种方法。

Service1.svc(和展开它后看到的Service1.svc.cs):

这个类实现了上面那个用“IService1”来声明的接口,这意味着,当你连接到一个WCF服务(这个服务使用由“Service1.svc”实现的IService1)的时候,这些才是真正的要执行的逻辑。请注意,在这个例子中,针对“Service1.svc”的路径总是提供这样的功能,但是在高级的WCF配置中,你可以把.svc替换掉,使用一个可以获得更大灵活性的配置。

Web.config:

这是Web应用程序的配置文件。值得注意的是,默认情况下,“AzureLocalStorageTraceListener”是被禁用的,“system.serviceModel”节点定义了我们可以使用“httpGet”(一个比较基础的Web请求)来获取服务的元数据。后面这种设置很有用,因为在开发过程中,我们可以使用一个浏览器来浏览这个服务。

WebRole.cs:

这是“RoleEntryPoint”的一个派生类,它控制着WCF角色在Windows Azure中的启动方式。“OnStart”方法用于配置Windows Azure诊断信息是如何迁移到blob storage中的——它每分钟都会按照在“AzureLocalStorageTraceListener”中配置的路径做一次这样的工作。注意,本地存储器应该这样来定义:

原文名:Implementing and Debugging a WCF Service in Windows Azure 作者:Andy

本文接《在Windows Azure中实现和调试一个WCF服务(中)》和《在Windows Azure中实现和调试一个WCF服务(下)》

【本文乃51CTO精选译文,转载请标明出处!】

网页标题:在WindowsAzure中实现和调试一个WCF服务(上)
本文地址:http://www.hantingmc.com/qtweb/news36/71836.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联