WEB开发网
开发学院软件开发Java Windows Azure AppFabric 入门教学系列 (二):一个... 阅读

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

 2012-03-22 11:58:06 来源:WEB开发网   
核心提示:本文是Windows Azure AppFabric入门教学的第二篇文章,可以说是正式的开始学习AppFabric了,Windows Azure AppFabric 入门教学系列 (二):一个简单的Service Bus例子,为了使后续的学习顺利进行请确保已浏览本教程的第一篇文章,并以按照该文完成了AppFabric项

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

该程序演示了Client向Service发送消息,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 Service(ACS)服务来确保安全性,这已超出了本篇教程的范畴,我们会在后续教程中讲解ACS的原理与运用。

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

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

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

代码:

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

服务端:

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

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

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

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

代码如下:

using System;

//应用WCF程序集

using System.ServiceModel;

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

namespace Service

{

 

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

  public interface IEchoContract

  {

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

    [OperationContract]

    string Echo(string text);

 

  }

}

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

代码如下:

using System;

using System.ServiceModel;

namespace Service

{

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

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

  public class EchoService: IEchoContract

  {

    public string Echo(string text)

    {

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

      return text;

    }

  }

}

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

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

添加引用:

using System.ServiceModel;

using System.ServiceModel.Description;

using Microsoft.ServiceBus;

using Microsoft.ServiceBus.Description;

Main函数中:

static void Main(string[] args)

{

    Console.Title = "Service";

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

    string serviceNamespaceDomain = Console.ReadLine();

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

    string issuerName = Console.ReadLine();

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

    string issuerSecret = Console.ReadLine();

  

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

    Uri address = ServiceBusEnvironment.CreateServiceUri("sb",

                  serviceNamespaceDomain, "EchoService");

 

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

    TransportClientEndpointBehavior sharedSecretServiceBusCredential = new TransportClientEndpointBehavior();

    sharedSecretServiceBusCredential.CredentialType = TransportClientCredentialType.SharedSecret;

    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = issuerName;

    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = issuerSecret;

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

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

    // 为端点创建ServiceRegistrySettings 行为

    IEndpointBehavior serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);

 

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

    foreach (ServiceEndpoint endpoint in host.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服务

1 2  下一页

Tags:Windows Azure AppFabric

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接