Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On

  《Windows Azure Platform 系列文章目录

  注意:本文介绍的是国内由世纪互联运维的Windows Azure服务。

  项目文件请在这里下载。

  我们在使用Azure平台的时候,经常会遇到本地应用和云端应用进行互通互连的情况。

  在这种混合云的场景下,我们可以通过以下方式解决:

  一.Point-To-Site VPN

  将本地的一台设备(Point),与云端的网络(Site)进行互通互联。

  -  这里的Point指的就是企业内网的一台主机(VPN客户端)

  -  这里的Site是指Azure Virtual Network的网络

  -  这样可以实现将企业内网的一台主机与云端网络互通互联,同时通过VPN保证网络的安全性

  企业内网的主机需要安装VPN客户端

  支持以下客户端操作系统:

    Windows 7 (32位和64位)

    Windows Server 2008 R2(仅支持64位)  

    Windows 8(32位和64位)

    Windows Server 2012(仅支持64位)

  Point-to-Site VPN是使用SSTP VPN协议

  有兴趣的读者可以参考笔者之前的文章:

  Windows Azure Virtual Network (8) 创建Azure Point-to-Site点到站点 VPN

  二.Site-To-Site VPN

  将本地的网络(Site)与云端的Azure虚拟网络(Site)进行互通互联。

  Site-To-Site VPN的前提要求:

  -  企业本地网络需要固定的公网IPV4地址

  -  需要微软认证的VPN设备 or Windows Server 2012 RRAS

    设备列表请参考:https://msdn.microsoft.com/en-us/library/azure/jj156075.aspx

  -  VPN设备必须在NAT设备的前面

  Site-to-Site VPN是使用IPSec VPN协议

  这篇文章我回头再写 :)

  以上的方法都可以看出,Azure Virtual Network VPN的方式,都是基于TCP/IP网络协议的。

  在很多场景下,实现Point-To-Site和Site-To-Site并不是非常容易。例如以下场景:

  -  企业没有固定的公网IPV4地址

  -  企业的IT策略,不允许设置Azure Site-To-Site VPN

  在这种情况下,就可以使用Azure Service Bus Relay On实现应用层的混合云了。

  Azure Service Bus Relay On

  -  不依赖于固定公网IPV4或者VPN设备

  -  可以穿透NAT设备

  如下图:

  

  Azure Service Bus Relay On是通过HTTP, HTTPS实现应用的混合云。假设当需要把企业内网WCF应用服务发布到公网,被其他客户端进行调用的时候,只需要在企业内网允许HTTP需要80端口,或者HTTPS需要的443端口即可。

  另外,企业内网的WCF应用服务,和客户端(外网)应用服务之间,不是直接调用的。而是首先需要将WCF服务,在Azure Service Bus Relay On进行注册,客户端(外网)应用才能调用被注册的Azure Service Bus Relay On。Azure Service Relay On概念上类似于代理服务器。

  

  注意:Azure Service Bus在企业内网的应用目前只能支持WCF服务。

  前面的介绍完了,现在进入Demo演示阶段。笔者模拟以下场景:

  1.在企业内网中,有一台Web Service,上面部署了WCF服务

  2.通过Azure Service Bus Relay On,将WCF注册到Service Bus上。

  3.从Internet上的另外一台客户端机器,通过验证Service Bus的SAS验证方式,来调用Azure Service Bus Relay On上的服务。

  以下项目分为三类:

  -  使用PowerShell,创建Azure Service Bus Relay On

  -  服务器端,将WCF服务注册到Azure Service Bus。因为WCF项目执行的时候,需要宿主,本项目以Windows Console为宿主。

  -  客户端,Internet上的机器,调用Azure Service Bus注册的WCF服务

  一.使用PowerShell,创建Azure Service Bus Relay On

  请读者注意,Azure Service Bus Relay On只能通过PowerShell来创建。如何读者已经通过Management Portal,创建了Azure Service的话,是不能正常使用Relay On功能的。需要删除,然后通过PowerShell重建。

  1.我们使用管理员身份,运行Azure PowerShell

  2.假设读者有多个Azure订阅的情况下,切换当前订阅

Select-AzureSubscription ‘[YourSubscriptionName]‘ -current

  3.执行以下代码:

New-AzureSBNamespace -Name ‘[YourServiceBusName]‘ -NamespaceType ‘Messaging‘ -Location ‘[YourLocation]‘

  例如笔者想创建的Service Bus名称为leiservicebus,位于China East数据中心

New-AzureSBNamespace -Name ‘leizhangservicebus‘ -NamespaceType ‘Messaging‘ -Location ‘China East‘

  以下为执行结果截图:

  4.可以在Azure Management Portal查看到创建结果。我们还可以查看Service Bus的连接字符串,如下图:

  

  注意:客户端是否可以连接Azure Service Bus Relay是通过上面的连接字符串来验证的。

  以上,创建Azure Service Bus Relay On的工作就完成了。

  二.服务器端,将WCF服务注册到Azure Service Bus

  接下来,我们使用管理员身份,运行Visual Studio 2013。创建一个新的项目,重名为SBRelay。

  1.增加Windows Console Library,命名为SBRelayServer

  2.在Program.cs增加以下代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ServiceModel;
using Foundation;
using Microsoft.ServiceBus;
using System.ServiceModel.Description;

namespace SBRelayServer
{
    class Program
    {
        static void Main(string[] args)
        {
            var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "+LSd5njWikUZEi+RY/NpkkR/GL3PlpVRGCv23gwKrM0=");

            var serviceHost = new ServiceHost(typeof(EchoService));

            var serviceEndpoint = serviceHost.AddServiceEndpoint(
                typeof(IEcho),
                new NetTcpRelayBinding(),
                "sb://leizhangservicebus.servicebus.chinacloudapi.cn/echo");

            serviceEndpoint.Behaviors.Add(new TransportClientEndpointBehavior(tokenProvider));

            serviceHost.Open();
            Console.WriteLine("Press ENTER to close");
            Console.ReadLine();
            serviceHost.Close();
        }
    }
}

  注意:上图的TokenProvider为我们的SAS密钥。

  上面的应用程序中,会将本地的WCF注册到云端的Azure Service Bus,地址为sb://leizhangservicebus.servicebus.chinacloudapi.cn/echo

  3.在SBRelayServer项目中,增加EchoService.cs,输入以下代码:

using Foundation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SBRelayServer
{
    class EchoService : IEcho
    {
        public string GetValue()
        {
            return "Hello World!";
        }
    }
}

  服务器端会返回给客户端字符串,内容为Hello World!

  三.客户端,从客户端调用

  1.增加Windows Console Library,命名为SBRelayClient

  2.在Program.cs中,增加如下代码:

using Microsoft.ServiceBus;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
using Foundation;
using System.Diagnostics;

namespace SBRelayClient
{
    class Program
    {
        static void Main(string[] args)
        {
            var binding = new NetTcpRelayBinding();

            var channelFactory = new ChannelFactory<IEchoChannel>
            (
               binding,
               new EndpointAddress("sb://leizhangservicebus.servicebus.chinacloudapi.cn/echo")
           );

            channelFactory.Endpoint.EndpointBehaviors.Add(new TransportClientEndpointBehavior { TokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider("RootManageSharedAccessKey", "+LSd5njWikUZEi+RY/NpkkR/GL3PlpVRGCv23gwKrM0=") });

            using (var ch = channelFactory.CreateChannel())
            {
                Stopwatch sw = new Stopwatch();
                sw.Start();
                string returnValue = ch.GetValue();
                sw.Stop();
                Console.WriteLine("Get {0} From WCF Server", returnValue);
            }
            Console.ReadLine();
        }
    }
}

  上面的代码中,会从服务器读取GetValue方法,返回给客户端字符串。

  如何执行该代码?

  1.编译项目文件

  2.执行服务器端项目,SBRelayServer项目下的SBRelayServer.exe。

  3.等到服务器端项目,SBRelayServer.exe命令行显示Press ENTER to close,请不要关闭SBRelayServer.exe

  4.执行客户端项目,SBRelayClient项目下的SBRelayClient.exe

  5.下图中,左侧为服务器端命令行界面,右侧为客户端命令行结果,其中的Hello World即为服务器的返回值。

本博-三石Blog(下文简称本博),在本博客文章结尾处右下脚未注明转载、来源、出处的作品(内容)均为本博原创,本站对于原创作品内容对其保留版权,请勿随意转载,如若真有需要的朋友可以发Mail联系我;转载本博原创作品(内容)也必须遵循“署名-非商业用途-保持一致”的创作共用协议,请务必以文字链接的形式标明或保留文章原始出处和博客作者(Lei Zhang)的信息,关于本博摄影作品请务必注意保留(www.cnblog.com/threestone)等相关水印版权信息,否则视为侵犯原创版权行为;本博谢绝商业网站转载。版权所有,禁止一切有违中华人民共和国著作权保护法及相关法律和本博(法律)声明的非法及恶意抄袭。

时间: 2024-08-27 22:33:55

Windows Azure Service Bus (6) 中继(Relay On) 使用VS2013开发Service Bus Relay On的相关文章

Windows Azure Service Bus (4) 主题(Topic) 使用VS2013开发Service Bus Topic

<Windows Azure Platform 系列文章目录> 在笔者之前的文章中Windows Azure Service Bus (1) 基础 介绍了Service Bus支持主题(Topic).如下图: 当2个客户端同时订阅了相同的主题(Topic).当向这个Topic发送消息的时候,2个客户端会同时收到该消息. 笔者模拟一个在线聊天室的场景: 1.创建一个Windows Console命令行项目,编写相应的代码 2.运行项目,要求输入聊天室名称(即订阅了相同的主题Topic) 3.当2

Windows Azure HandBook (5) Azure混合云解决方案

<Windows Azure Platform 系列文章目录> 在很多情况下,我们都会遇到本地私有云和公有云做互通互联的混合云场景.对于这种混合云的场景,微软的Windows Azure会很好的解决. 从混合云的分类来说,微软将混合云分为以下三种: 1.虚拟化技术的混合云 2.网络层的混合云   (1)Point-To-Site VPN (2)Site-To-Site VPN (3)Express Route 3.应用层的混合云 Service Bus Relay On 一.虚拟化技术的混合云

Windows Azure Service Bus (4) Service Bus Queue和Storage Queue的区别

<Windows Azure Platform 系列文章目录> 熟悉笔者文章的读者都了解,Azure提供两种不同方式的Queue消息队列: 1.Azure Storage Queue 具体可以参考:       Windows Azure Cloud Service (12) PaaS之Web Role, Worker Role, Azure Storage Queue(下) Azure Storage Queue提供基础的消息队列服务,例如AddMessage, DeleteMessage.

Windows Azure Platform体验(1):Windows Azure

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

[转]Windows Azure安全概述

本文转自:http://blogs.msdn.com/b/azchina/archive/2011/03/06/windows_5f00_azure_5f00_security_5f00_overview_5f00_white_5f00_papaer.aspx 摘要 Windows Azure ,作为一个应用程序宿主平台必须提供私密性,完整性和用户数据的可用性.它也必须提供透明的可靠性来允许用户和他们的代理商通过自己和Microsoft追踪服务管理. 本文档描述了大量在Windows Azure

Windows azure上创建及绑定自己域名的website

Windows azure已经是一个大家耳熟能详的服务了,IT界目前最多.最受关注的话题是所谓的"云",什么是云,其实真心没有一个合理的答案去解释,对于一个使用者来说,只要功能能满足,那最后的评价肯定是ok的,windows azure的收费确实很高,几乎所有的服务都是收费的.其实说到云服务,也许大家都会说亚马逊.阿里云-但说句实话,亚马逊在云服务器的方面确实做的相当不错,很受关注,但我也基本算是微软的粉丝了吧~,从一开始就基础微软的所有产品,所以还是比较终于微软的产品,加上我们部门的

Windows Azure Service Bus (1) 基础

<Windows Azure Platform 系列文章目录> 我们在基于Windows Azure进行云端开发的时候,云端的软件通常都需要与其他软件进行交互.这些其他软件可能包括其他Internet上的软件,或者内网的软件. 对于内网的软件来说,Azure提供Site-to-Site(S2S) VPN 和Point-to-Site(P2S) VPN的方式来打通Azure和内网应用程序之间的VPN连接.但是如果内网的应用程序使用了网络地址转换(NAT),S2S和P2S是无法支持在NAT背后的V

Windows Azure Service Bus (2) 队列(Queue)入门

<Windows Azure Platform 系列文章目录> Service Bus 队列(Queue) Service Bus的Queue非常适合分布式应用.当使用Service Bus Queue的时候,分布式应用的组件不直接进行通信. - 前端应用(发送方)创建一个Azure Service Bus Queue,插入需要处理的消息主体,然后继续处理前端业务逻辑 - 后端消息处理(接收方)从Service Bus Queue中取出消息,并进行处理 - 发送方不需要等待接收方的答复,以便在

跟我学Windows Azure 四 Cloud Service中的WebRole与WorkRole,及他们之间的通信

Cloud Service 中WebRole就相当与我们的WebSite,而WorkRole相当与我们在服务器上写了个Windows Service,站在高可用的角度上来讲,Cloud Service要优于WebSite,拿个例子来说,我们上传个数据,数据需要入库,通常website需要提交数据,等待响应,这个时候如果并发量大,系统响应时间会很长.如果使用Cloud Service就不存在这个问题,WebRole只负责把数据提交上来,而对数据的处理入库则可以提交给WorkRole来处理,中间可以