`
bk_lin
  • 浏览: 336677 次
社区版块
存档分类
最新评论

Windows Azure AppFabric 入门教学系列 (二):一个简单的Service Bus例子

 
阅读更多

公告:本博客为微软云计算中文博客的镜像博客。部分文章因为博客兼容性问题,会影响阅读体验。如遇此情况,请访问原博客

本文是Windows Azure AppFabric入门教学的第二篇文章,可以说是正式的开始学习AppFabric了。为了使后续的学习顺利进行请确保已浏览本教程的第一篇文章,并以按照该文完成了AppFabric项目和命名空间的创建。我们知道,AppFabircService BusAccess Control Service组成。本篇教学以一个简单的Echo程序来向大家简单的介绍一下Service Bus,让大家能有一个初步了解。

该程序演示了ClientService发送消息,service以相同的消息进行回应(Echo)。展示了Service Bus如何帮助在不同网络环境中的不同程序进行通信。

前置条件

为了使后续的教程能够顺利进行,请确保如下软件或组件已被安装:

·Microsoft .NET Framework 3.5 SP1

·Microsoft Visual Studio 2008 SP1 (or above)

·AppFabric SDK

请确保您已拥有一定的WCF编程经验,若没有,请浏览这里以快速的初步了解WCF

最后请确保已创建了一个AppFabric项目和一个服务命名空间。请参考这里

原理:

我们首先一下该Echo程序的运作原理。

步骤1,2,4,5是利用AppFabric中的Access Control ServiceACS)服务来确保安全性,这已超出了本篇教程的范畴,我们会在后续教程中讲解ACS的原理与运用。

我们主要关心步骤3和步骤69。步骤3为服务器程序与云端建立连接的过程。步骤6至9为客户端调用服务的过程。

Service Bus通过为服务提供了一套通用的命名规范简化了许多通信难题,在独立于网络拓扑和配置的节点之间提供直接或间接的通信。

Service Bus允许WCF应用程序监听公共网络地址,即使其位于NAT或网络防火墙后方。该功能使得应用程序的通信可以无关于其网络结构。使用Service Bus便无需编写与维护复杂的逻辑和代码来跨越不同的网络通信。

代码:

在了解了通信原理之后,我们来看看具体代码是如何编写的。

服务端:

1.Visual Studio 2008中新建项目,请确保已选择.NET framework 3.5并以Service命名,BasicSample为解决方案名创建Console Application

说明: C:/Users/t-liji/Desktop/first/echo2.png

2.Service项目添加程序集。右击Service项目,选择Add Reference.

加入System.ServiceModel以及Microsoft.ServiceBus.dll程序集。前者为WCF的核心程序集之一。后者能够在SDK中找到。

3.Service项目添加IEchoContract服务契约。右击Service项目,Add->new Item

代码如下:

usingSystem;

//应用WCF程序集

usingSystem.ServiceModel;

//将接口定义为WCF的服务契约

namespaceService

{

[ServiceContract(Name ="EchoContract", Namespace ="http://samples.microsoft.com/ServiceModel/Relay/")]

publicinterfaceIEchoContract

{

//定义了Echo操作契约,指明该方法为服务契约的一部分。

[OperationContract]

stringEcho(stringtext);

}

}

4.创建EchoService来实现IEchoContract服务契约。右击Service项目,Add->new Item

代码如下:

usingSystem;

usingSystem.ServiceModel;

namespaceService

{

//表明此类已实现WCF服务

[ServiceBehavior(Name ="EchoService", Namespace ="http://samples.microsoft.com/ServiceModel/Relay/")]

publicclassEchoService:IEchoContract

{

publicstringEcho(stringtext)

{

Console.WriteLine("Echoing: {0}", text);

returntext;

}

}

}

5.通过AppFabric Service Bus来托管服务:

打开Program.cs,改为如下代码:

添加引用:

usingSystem.ServiceModel;

usingSystem.ServiceModel.Description;

usingMicrosoft.ServiceBus;

usingMicrosoft.ServiceBus.Description;

Main函数中:

staticvoidMain(string[] args)

{

Console.Title ="Service";

Console.Write("Your Service Namespace Domain (e.g. sb://<YOUR-NAMESPACE>.servicebus.windows.net/): ");

stringserviceNamespaceDomain = Console.ReadLine();

Console.Write("Your Issuer Name: ");

stringissuerName = Console.ReadLine();

Console.Write("Your Issuer Secret: ");

stringissuerSecret = Console.ReadLine();

//基于服务命名空间来创建服务URI

Uri address = ServiceBusEnvironment.CreateServiceUri("sb",

serviceNamespaceDomain,"EchoService");

//为端点(endpoint)创建凭据对象(credential object

TransportClientEndpointBehavior sharedSecretServiceBusCredential =newTransportClientEndpointBehavior();

sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;

sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;

sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

//创建会读取配置文件的服务宿主(service host

ServiceHost host =newServiceHost(typeof(EchoService), address);

//为端点创建ServiceRegistrySettings行为

IEndpointBehavior serviceRegistrySettings =newServiceRegistrySettings(DiscoveryType.Public);

//为配置文件中所有端点加入Service Bus凭据

foreach(ServiceEndpoint endpointinhost.Description.Endpoints)

{

endpoint.Behaviors.Add(sharedSecretServiceBusCredential);

}

host.Open();

Console.WriteLine("Service address: "+ address);

Console.WriteLine("Press [Enter] to exit");

Console.ReadLine();

//关闭服务

host.Close();

}

6.配置WCF服务

右击Service项目,Add->new Item

选择Application Configuration File。将App.config改为如下:

<configuration>

<system.serviceModel>

<services>

<service name="Service.EchoService">

<endpoint contract="Service.IEchoContract"

binding="netTcpRelayBinding"/>

</service>

</services>

</system.serviceModel>

</configuration>

客户端:

7.与创建Service项目一样,创建一个新项目,命名为Client

8.参考步骤2,为Client项目加入System.ServiceModel以及Microsoft.ServiceBus.dll程序集。

9.参考步骤3,添加IEchoContract服务契约,代码如下:

usingSystem;

//应用WCF程序集

usingSystem.ServiceModel;

//将接口定义为WCF的服务契约

namespaceClient

{

[ServiceContract(Name ="EchoContract", Namespace ="http://samples.microsoft.com/ServiceModel/Relay/")]

publicinterfaceIEchoContract

{

[OperationContract]

stringEcho(stringtext);

}

}

10.使用通过AppFabric Service Bus托管的WCF服务

打开Client项目的Program.cs

加入引用:

usingSystem.ServiceModel;

usingMicrosoft.ServiceBus;

Main函数中:

staticvoidMain(string[] args)

{

Console.Title ="Client";

Console.Write("Your Service Namespace Domain (e.g. sb://<YOUR-NAMESPACE>.servicebus.windows.net/): ");

stringserviceNamespaceDomain = Console.ReadLine();

Console.Write("Your Issuer Name: ");

stringissuerName = Console.ReadLine();

Console.Write("Your Issuer Secret: ");

stringissuerSecret = Console.ReadLine();

//基于服务命名空间来创建服务URI

Uri serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespaceDomain,"EchoService");

//为端点(endpoint)创建凭据对象(credential object

TransportClientEndpointBehavior sharedSecretServiceBusCredential =newTransportClientEndpointBehavior();

sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;

sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;

sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

//创建读取配置文件的信道工厂(channel factory

ChannelFactory<IEchoContract> channelFactory =newChannelFactory<IEchoContract>("RelayEndpoint",newEndpointAddress(serviceUri));

//应用Service Bus凭证

channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);

//创建并打开客户端信道

IEchoContract channel = channelFactory.CreateChannel();

((ICommunicationObject)channel).Open();

Console.WriteLine("Enter text to echo (or [Enter] to exit):");

stringinput = Console.ReadLine();

while(input != String.Empty)

{

try

{

Console.WriteLine("Server echoed: {0}", channel.Echo(input));

}

catch(Exception e)

{

Console.WriteLine("Error: "+ e.Message);

}

input = Console.ReadLine();

}

((ICommunicationObject)channel).Close();

channelFactory.Close();

}

11.参考步骤6,为Client项目新建App.config,修改如下:

<configuration>

<system.serviceModel>

<client>

<!-- Application Endpoint -->

<endpoint name="RelayEndpoint"

contract="Client.IEchoContract"

binding="netTcpRelayBinding"/>

</client>

</system.serviceModel>

</configuration>

验证:

至此,代码已经创建完毕,我们已经可以进行调试了。

1.右击Service项目,Debug->Start new Instance。(按F5也可)

按照Console提示输入您在Windows Azure platform AppFabric portal处所注册得到的信息。

Service Namespace DomainIssuer NameIssuer Key的具体位置请参照下图。

说明: C:/Users/t-liji/Desktop/first/issuer.png

2.右击Client项目,Debug->Start new Instance启动另一调试实例,同样按照Console提示输入信息。

最终效果如图:

说明: C:/Users/t-liji/Desktop/first/echo5.png

探析:

本示例简单的展示了如何通过Service Bus暴露服务以便让客户端访问。假设我们在公司内部运行服务器端程序,我们能够在任何可以访问Internet的机器上运行客户端程序。无论客户端身处何种网络结构,都能通过该URI访问到服务。在本例中该URI会成为如下形式:sb://<serviceNamespace>.servicebus.windows.net/EchoService/

Service Bus为我们应用程序之间的通信提供了桥梁,我们无需编写和维护复杂的代码。

本示例程序中还有另外一个重要概念便是程序通信时的绑定(binding)方式。这原本是WCF中的概念,但是ServiceBus对其进行了扩展,本例使用的NetTcpRelayBinding便是拓展的binding之一。NetTcpRelayBinding能够使你暴露出通过URI便能访问的端点。当使用NetTcpRelayBinding的端点打开时,其URI便被注册于ServiceBus,任何使用相同类似配置的授权客户便能向该URI发送信息。这样,Service Bus便成为了那2个端点之间的中转。

目前为止,我们的教程都是基于Azure付费账户的。在下一篇教程中我们会介绍LABS环境。LABS提供了免费的使用环境。这对于国内用户和开发者来说会带来极大的便利。敬请期待我们的下一篇教程。好了,大家赶快动手试一下,进入奇妙的AppFabric世界吧!

分享到:
评论

相关推荐

    Windows Azure使用入门 第二课:建立自己的网站.pdf

    ### Windows Azure 使用入门:建立自己的网站 #### 一、Windows Azure 中的网站概念 随着互联网技术的发展,网站已经成为企业和组织对外展示形象、提供服务的重要窗口。传统的网站搭建往往需要自行购买服务器、...

    Windows Azure使用入门 第一课:创建虚拟机.pdf

    ### Windows Azure 使用入门:创建虚拟机 #### 一、Windows Azure 虚拟机概述 在探讨如何在 Windows Azure 平台上创建虚拟机之前,我们首先需要了解什么是 Windows Azure 虚拟机以及它为何重要。 **Windows Azure...

    Windows Azure使用入门 第四课:开发测试在云中.pdf

    例如,尝试创建一个简单的 Windows Azure 网站,或构建一个基于 Service Bus 的消息传递系统。通过实际操作,可以更好地掌握 Windows Azure 的各项功能。 通过以上介绍,我们了解了 Windows Azure 提供的主要服务、...

    Windows Azure入门教学系列

    Windows Azure 入门教学系列 本教程系列旨在帮助初学者快速入门 Windows Azure 平台,学习如何创建、部署和管理云端应用程序。通过本系列教程,读者将了解 Windows Azure 的基本概念、开发工具和部署流程。 知识点...

    Windows Azure使用入门 第七课:云端存储和管理数据.pdf

    Azure Storage Explorer 提供了一个直观的界面,使得管理存储变得更加简单。无论是上传文件、查看日志记录还是设置容器权限,都可以通过这个工具轻松完成。 #### 常见问题解答 在使用过程中,可能会遇到一些常见...

    Windows Azure使用入门 第五课:用户认证上下打通.pdf

    在深入了解《Windows Azure 使用入门 第五课:用户认证上下打通》的内容之前,我们先回顾一下Windows Azure作为一个全面的云服务平台,是如何确保用户数据的安全性的。文档重点介绍了Azure Active Directory (Azure ...

    Windows Azure使用入门 第九课:开发移动应用和通知发送.pdf

    - **创建移动服务**:在 Windows Azure 平台上,用户可以通过简单的步骤来创建一个新的移动服务实例。创建过程通常涉及选择服务级别、配置数据库和其他必要的设置。 - **创建一个基于 HTML/JavaScript 的移动应用...

    Windows Azure使用入门 第八课:云端备份和灾难恢复.pdf

    ### Windows Azure 使用入门 第八课:云端备份和灾难恢复 #### 一、Windows Azure 备份服务概述 在数字化时代,企业的核心竞争力往往体现在其所掌握的数据价值上。因此,确保这些宝贵数据的安全至关重要。传统的...

    Windows Azure使用入门 第三课:创建云端的数据库.pdf

    ### Windows Azure 使用入门 第三课:创建云端的数据库 #### Windows Azure 中的数据库概述 Windows Azure(现称为Azure)作为微软推出的云服务平台,为企业和个人提供了丰富的云计算资源和服务。其中,数据库服务...

    Windows Azure使用入门 第十课:云端实现媒体点播与直播传送.pdf

    Windows Azure 媒体服务支持动态打包,使得内容仅需存储一个副本即可,极大地优化了存储利用率。 #### 三、编码器配置 编码器配置是指设置编码参数以满足特定的需求。这些参数包括但不限于分辨率、比特率、帧速率...

    WINDOWS AZURE从入门到精通

    《Windows Azure从入门到精通》针对微软的云计算平台windows azure,循序渐进地介绍了如何构建和管理云端的可扩展应用,一次一个知识点,同时辅之以适当的练习,可帮助读者轻松掌握基本的编程技能,掌握windows ...

    走进云计算Windows Azure实战手记光盘

    Queue存储服务与应用程序问通信、云上的关系数据库:SQL Azure、云上的访问控制技术:AppFabric Access Control、云服务的集散中心:AppFabric Service Bus、Windows Azure与其他平台的互操作性、云计算与Windows ...

    Windows Azure从入门到精通含源代码

    它是一个综合性的云服务,包括计算、存储、数据库、网络、分析等众多功能,支持多种编程语言、工具和框架,无论是.NET、Java、Python、Node.js还是PHP,都能在Azure上无缝运行。 **云计算基础** 云计算的核心概念...

    Windows.Azure从入门到精通

    4. **Web Apps与App Service**:Azure App Service提供了一个托管环境,用于构建、部署和管理Web应用、移动后端和API。它支持多种框架,如.NET、Node.js、PHP、Java和Python。 5. **容器服务**:Azure Kubernetes ...

    Windows Azure快速入门——为什么选择Windows Azure

    ### Windows Azure 快速入门 —— 为什么选择 Windows Azure? #### Windows Azure 是什么? Windows Azure,作为微软的云服务平台,提供了广泛的服务,旨在帮助企业轻松搭建、部署并管理各种解决方案,几乎能满足...

    azure-service-bus::cloud_selector:Azure Service Bus服务问题跟踪和示例

    Azure Service Bus是微软提供的一个云消息传递平台,它为企业级应用程序提供了可靠的异步通信和数据交换能力。Service Bus利用高级消息队列(AMQP)协议,支持多种消息传递模式,包括点对点、发布/订阅以及交易性...

    Windows Azure云平台概述.pdf

    Windows Azure 是微软提供的一个全面的云服务平台,旨在帮助企业快速构建、部署和管理应用程序,同时提供了高度可扩展性和灵活性。该平台的核心在于其云计算模型,这种模型改变了传统的IT资源分配方式,通过按需分配...

    《Windows Azure入门指南》

    Windows Azure,现称为Microsoft Azure,是微软提供的一个全面的云计算平台,为企业和个人开发者提供了一套强大的工具和服务,用于构建、部署和管理应用程序和数据。本指南将引领初学者深入了解Azure的核心概念、...

    使用Azure AppFabric Service Bus自动化Windows应用程序

    没有导出程序界面的非托管Windows GUI应用程序可以通过注入的代码自动执行。 WCF感知的注入组件允许位于全球的客户端通过Azure AppFabric Service Bus与自动化应用程序进行通信,而无需防火墙和动态IP地址

Global site tag (gtag.js) - Google Analytics