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

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

为了把在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”中配置的路径做一次这样的工作。注意,本地存储器应该这样来定义:

<LocalStorage name=”WcfRole.svclog” sizeInMB=”1000″ cleanOnRoleRecycle=”false” />

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

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

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

【编辑推荐】 

  1. 微软公布云计算平台Azure收费模式细节
  2. 云计算意在长远,微软云计算服务Windows Azure已经启用
  3. 技术透析:Windows Azure Platform框架与组成
  4. 微软Windows Azure Platform技术解析
  5. 走近微软云:SQL Server到Azure数据同步
  6. 当微软Azure遭遇亚马逊EC2:五大关键区别
  7. Windows Azure云计算平台新增五大功能
  8. 云计算前途光明 Azure用户数突破31000
  9. 如何把应用程序部署到Windows Azure中

 

责任编辑:王勇 来源: 来源:51CTO
相关推荐

2011-03-15 16:07:33

Windows AzuWCF

2011-03-15 16:12:00

Windows AzuWCF

2011-03-22 09:45:56

Windows AzuSilverlight

2011-03-22 10:03:55

Windows AzuSilverlight

2010-11-25 10:05:22

Visual StudSilverlightWCF

2011-03-24 13:02:35

WCF服务角色Azure

2011-03-14 15:10:10

AzureFacebook

2010-05-28 09:00:23

WCFAzure

2011-03-10 10:45:47

Azure“Hello Worl

2011-03-14 14:47:50

2009-06-25 11:18:20

Silverlight

2013-07-02 11:34:46

SUSELinuxWindows Azu

2013-07-02 10:52:42

SUSELinuxWindows Azu

2020-12-16 14:29:40

终端开发shell

2011-03-14 15:14:10

AzureFacebook营销式应用程序

2011-03-15 19:45:27

Windows Azu

2022-05-22 13:55:30

Go 语言

2021-01-04 09:12:31

集合变量

2016-08-11 15:03:36

Redis Sentigossip protagreement p

2022-11-06 19:17:39

LinuxVentoy
点赞
收藏

51CTO技术栈公众号