Windows Azure Platform体验(3):Azure AppFabric

Windows Azure Platform有Windows Azure、SQL Azure、Azure AppFabric三部分。

使用AppFabric,可以轻松将内部部署应用程序与云连接。通过在内部部署的IT应用程序和基于云的服务之间启用安全连接和消息传送,AppFabric提供标识管理和防火墙友好的消息传送,从而保护您的资产。

这节我们体验Azure AppFabric,必备软件:

这次体验有下面几个步骤,分别是:

创建AppFabric项目

AppFabirc由Service Bus和Access Control Service组成,为了使用这些功能和特性,我们必须创建一个Service Project。

首先我们使用账号登录Azure AppFabric门户,网址为http://appfabric.azure.com,你可以看到下面页面,当前没有创建任何服务空间,我们需要添加一个服务空间。服务空间为暴露于Service
Bus的应用程序定义了应用程序边界,以及用来为应用程序构建Service Bus端点。我们点击“Add Service Namespace”:

进入创建服务空间页面,输入服务空间名称、选择区域,选择服务总线连接包,可选0、5、25、100、500连接数。然后点击“Create”按钮:

激活服务时请耐心等待,可能需要数分钟时间。一旦命名空间被激活,便出现在可用服务空间列表上。

我们可以在可用服务空间列表上点击刚刚创建的服务空间,显示服务空间信息页面:在服务命名空间信息页面,我们需要记录下Default Issuer Name和Default Issuer Key。接下来会使用到它们。

体验AppFabric Service Bus

这个示例演示了Client向Service发送消息,Service以相同的消息进行回应。展示了Service Bus如何在不同网络环境中的不同程序进行通信。

原理

我们首先了解这个程序的运作原理:

步骤1,2,4,5是利用AppFabric中的Access Control服务用来确保安全性。

步骤3是服务器程序与云端建立连接的过程。步骤6,7,8,9是客户端调用服务的过程。

Service Bus通过为服务提供了一套通用的命名规范简化了许多通信难题,在独立于网络拓扑和配置的节点之间提供直接或间接的通信。Service Bus允许WCF应用程序监听公共网络地址,即使其位于NAT或网络防火墙后方。该功能使得应用程序的通信可以无关于其网络结构。使用Service Bus便无需编写与维护复杂的逻辑和代码来跨越不同的网络通信。

代码

我们创建一个WCF服务和一个客户端,两者通过云端的Service Bus交互。解决方案项目结构如下:

注意,都需要引用System.ServiceModel.dll和Microsoft.ServiceBus.dll程序集。前者为WCF的核心程序集之一。后者在%ProgramFiles%\Windows Azure AppFabric SDK\V1.0\Assemblies\NET4.0中。

服务器端:

//WCF的服务契约
[ServiceContract]
public interface IAppFabricServiceBusContract
{
    //定义了Hello操作契约,指明该方法为服务契约的一部分
    [OperationContract]
    string Hello(string text);
}
//实现WCF的服务契约
[ServiceBehavior]
public class AppFabricServiceBusService : IAppFabricServiceBusContract
{
    public string Hello(string text)
    {
        Console.WriteLine("客户端请求: {0}", text);
        return text;
    }
}

配置WCF服务

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service name="HelloAppFabricServiceBus.Service.AppFabricServiceBusService">
        <endpoint binding="netTcpRelayBinding"
             contract="HelloAppFabricServiceBus.Service.IAppFabricServiceBusContract" />
      </service>
    </services>
  </system.serviceModel>
</configuration>

主方法

//通过AppFabric Service Bus来托管服务
static void Main()
{
    //基于服务命名空间来创建服务URI
    var address = ServiceBusEnvironment.CreateServiceUri("sb", "[Service Namespace]",
                                "AppFabricServiceBusService");
    //为端点(endpoint)创建凭据对象(credential object)
    var sharedSecretServiceBusCredential = new TransportClientEndpointBehavior
                {
                  CredentialType = TransportClientCredentialType.SharedSecret
                };
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = "[Issuer Name]";
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = "[Issuer Key]";
    //创建会读取配置文件的服务宿主(service host)
    var host = new ServiceHost(typeof(AppFabricServiceBusService), address);
    //为端点创建ServiceRegistrySettings行为
    var serviceRegistrySettings = new ServiceRegistrySettings(DiscoveryType.Public);
    //为配置文件中所有端点加入Service Bus凭据
    foreach (var endpoint in host.Description.Endpoints)
    {
        endpoint.Behaviors.Add(serviceRegistrySettings);
        endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    }
    //打开服务
    host.Open();
    Console.WriteLine("服务地址: " + address);
    Console.WriteLine("按[Enter]键关闭宿主服务");
    Console.ReadLine();
    //关闭服务
    host.Close();
}

客户端:

//WCF的服务契约
[ServiceContract]
public interface IAppFabricServiceBusContract
{
    [OperationContract]
    string Hello(string text);
}

配置

<?xml version="1.0"?>
<configuration>
  <system.serviceModel>
    <client>
      <endpoint name="RelayEndpoint"
            contract="HelloAppFabricServiceBus.Client.IAppFabricServiceBusContract"
            binding="netTcpRelayBinding"/>
    </client>
  </system.serviceModel>
</configuration>

主方法

//使用通过AppFabric Service Bus托管的WCF服务
static void Main()
{
    //基于服务命名空间来创建服务URI
    var serviceUri = ServiceBusEnvironment.CreateServiceUri("sb", "[Service Namespace]",
                                  "AppFabricServiceBusService");
    //为端点(endpoint)创建凭据对象(credential object)
    var sharedSecretServiceBusCredential = new TransportClientEndpointBehavior
            {
                CredentialType = TransportClientCredentialType.SharedSecret
            };
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerName = "[Issuer Name]";
    sharedSecretServiceBusCredential.Credentials.SharedSecret.IssuerSecret = "[Issuer Key]";
    //创建读取配置文件的信道工厂(channel factory)
    var channelFactory = new ChannelFactory<IAppFabricServiceBusContract>("RelayEndpoint",
                             new EndpointAddress(serviceUri));
    //应用Service Bus凭证
    channelFactory.Endpoint.Behaviors.Add(sharedSecretServiceBusCredential);
    //创建并打开客户端信道
    var channel = channelFactory.CreateChannel();
    ((ICommunicationObject)channel).Open();
    Console.WriteLine("输入文字(或者按[Enter]键关闭连接):");
    var input = Console.ReadLine();
    while (input != String.Empty)
    {
        try
        {
            Console.WriteLine("服务器返回: {0}", channel.Hello(input));
        }
        catch (Exception e)
        {
            Console.WriteLine("错误: " + e.Message);
        }
        input = Console.ReadLine();
    }
    ((ICommunicationObject)channel).Close();
    channelFactory.Close();
}

测试

注意你需要将Service Namespace,Issuer Name和Issuer Key替换你的,这些都是基于Azure付费账户。

先启动Service,在启动两个Client,测试,我们可以看到它们之间的交互了。

好了,Windows Azure Platform的三部分我们稍微体验了一番,以后有机会在说说更深入的内容。

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-12-23 12:30:27

Windows Azure Platform体验(3):Azure AppFabric的相关文章

Windows Azure Platform体验(2):SQL Azure

Windows Azure Platform有Windows Azure.SQL Azure.Azure AppFabric三部分. SQL Azure是云关系数据库.您的数据:随时随地管理.SQL Azure是云中的完全关系数据库. 这节我们体验SQL Azure,必备软件: Microsoft SQL Server 2008 R2 Windows Azure Platform账户 这次体验有下面几个步骤,分别是: 初始化SQL Azure 连接到SQL Azure 配置SQL Azure数据

Windows Azure Platform体验(1):Windows Azure

创建云服务项目 首先理解下Web托管角色功能,利用这个功能,我们创建一个新网站,然后将它托管在Windows Azure内. 以管理员身份启动Visual Studio 2010,创建一个新的Azure云服务项目.选择"云"模板类型的"Windows Azure 云服务"项目模板.将这个新项目命名为"HelloAzure",单击"确定"之后,立即弹出一个新的向导. 在这个向导中,可以为这个云应用程序创建一些不同类型的角色,这样

Windows Azure 超值体验1元一个月,还可获得CSDN 500C币

在CSDN首页上看到Windows Azure 超值体验1元一个月的广告,最重要的是参与活动还可获得CSDN 500C币,果断参加一下. Windows Azure是什么? Windows Azure 是一个开放而灵活的云平台,通过该平台,您可以在世纪互联管理的数据中心的网络中快速生成.部署和管理应用程序.您可以使用任何语言.工具或框架生成应用程序.可将公有云应用程序与现有 IT 环境相集成. Windows Azure 中有什么? 从服务的角度来说,Windows Azure 可以为各类用户提

Windows Azure 初体验

最近看到windows azure 在做活动,只需花一块钱就可以体验一个月的windows azure. 于是,我就注册了一个账号也尝试一把云时代,传送门. 注册很简单的,成功后可以看到这个界面. 然后,我就研究了一下怎么把网站发布到云上,在此分享一下.网站是简单的基于asp.net mvc + code first 比较简单. 首先新建一个asp.net mvc 的网站.在此我命名为 WindowsAzureMVC,为了支持code first 需要添加entity framework 的dl

Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户

<Windows Azure Platform 系列文章目录> 了解和掌握Windows Azure相关的基础知识是非常重要的. 问题1:什么叫做Org ID Org ID是Azure China特殊的用户名系统. 一个企业用户可以使用<username>@<OrgID>.partner.onmschina.cn来登陆使用Azure China. 比如公司名为contoso的企业,可以注册Org ID为:@contoso.partner.onmschina.cn 问题2

Windows Azure初体验

目前在IT界,云这个概念的第一意思不再是词典里的解释了.不过它们还是有相同点的——也许确实会酝酿出一块大蛋糕,可也是飘在天上,众神分食之,与我等P民无关.所谓云,不过是网络时代发展到一定阶段的必然产物,而并非划时代的技术质变,so,我一直保持既不排斥亦不主动接触的立场.but,最近我有个个人服务器快到期了,于是也打算尝试一番. 现在比较知名的云服务有很多,国内的首推阿里云,而作为.Neter,Windows Azure也是一种选择.本人同时申请了两者的免费试用体验,对于阿里云,在申请阶段博主被折

Windows Azure 使用体验

本文只是对Windows Azure的肤浅使用做个记录,算是简单入门吧. 一.门户网站 Windows Azure其实有两个版本,我们在国内所说的或者说所用的就是有别于国际版的,主要原因我想各位也是知道的,毕竟数据存储在哪还是比较敏感的.当然两个版本提供的服务也是有所区别的,主要就是国际版的服务比较多,比较全,而且更新也是最及时的,这点我们从其官网也可以看出端倪: Windows Azure的国际版官网为http://azure.microsoft.com/en-us/ 国内版的官网为 http

Microsoft Azure开发体验 – 网络报名系统

去年底RP好抢到了中国版Azure的使用机会,最近社团里讨论到9月份招新的问题,就用Azure Website和Azure Table Storage打造了这个报名系统. 网站放在 http://joinzjazure.chinacloudsites.cn/ ,一个很简单的页面,用的是bootstrap的CSS,针对不同分辨率的屏幕做了优化,在手机上也可以有不错的体验. 基础知识 阅读本文,我假定你具有以下知识: C# 基础知识 ASP.NET MVC 基础知识 知道 Azure 的概念 ASP

Windows Azure Storage (23) 计算Azure VHD实际使用容量

<Windows Azure Platform 系列文章目录> 对于A系列和D系列的虚拟机来说,使用的是普通存储. 普通存储的存储资源,是按照每GB每月计费的.Microsoft Azure普通存储资源是用多少算多少的,且按照平均使用计算.     http://blogs.msdn.com/b/windowsazurestorage/archive/2010/07/09/understanding-windows-azure-storage-billing-bandwidth-transac