构建混合应用方式之Azure混合连接

  WCF中继构建混合应用的方式,由于对WCF的依赖,使得其使用有一定的局限性,基本上只适用于本地服务是WCF的。净应用。而混合连接则弥补了这一块的缺陷,除了支持原有WCF中继的功能之外,还提供了多平台多语言的支持,这只要是因为混合连接是基于开放标准协议web sockets实现的。

以下是与WCF中继的一个对比表:,


,

下面主要分三种情况来介绍混合连接的使用:

一只基于混合连接SDK

二只基于Azure web应用程序混合连接工具

三只基于PortBridge示例程序

,

<人力资源/>

,创建混合连接

可以登陆Azure中国门户网站,按照界面提示一步步创建。也可以通过PowerShell命令,如下。

构建混合应用方式之Azure混合连接

 #, login 用Azure  China  with  your  accountLogin-AzureRmAccount  -Environment  AzureChinaCloud rgName 美元;=," relaydemorg " namespaceName 美元;=,“relaydemons”美元的位置=,“China 东方”hcName 美元;=,“hcdemo”New-AzureRmResourceGroup  -Name  rgName 美元;位置;locationNew-AzureRmRelayNamespace 美元;-ResourceGroupName  rgName 美元;-Name  namespaceName 美元;位置;locationNew-AzureRmRelayHybridConnection 美元;-Namespace  namespaceName 美元;-ResourceGroupName  rgName 美元;-Name  hcName 美元;-RequiresClientAuthorization 美元真正的

创建出来混合连接字符串就是某人://relaydemons.servicebus.chinacloudapi.cn/hcdemo

,

<人力资源/>

,

基于混合连接SDK

目前微软官方提供了两个SDK,一个是. NET语言版本,另一个是节点。JS版本。两个SDK也都开源在Github上:azure-relay-net, azure-relay-node。

本地服务(监听者)

首先本地服务端作为监听者,需要要使用具有监听权限的连接字符串,创建一个出站的WebSocket连接,也就是注册到Azure中继服务上。如果本地有多个监听者,那么进入的访问请求会随机地发送。一个混合连接最多支持25个监听者。

构建混合应用方式之Azure混合连接

 private  const  string  ConnectionString =,“connection  string  with  listen 许可”;//,Listenvar  listener =, new  HybridConnectionListener (ConnectionString); await  listener.OpenAsync ();//, AcceptHybridConnectionStream  relayConnection =, await  listener.AcceptConnectionAsync ();//, Readvar  reader =, new  StreamReader (relayConnection); var  line =, await  reader.ReadLineAsync ();//, OutputConsole.WriteLine(线),,//,Closeawait  relayConnection.CloseAsync (CancellationToken.None); 

外部服务(发送者)

发送者提供具有发送权限的连接字符串(不是必须如果建立混合连接时没有要求客户端认证,不过从安全角度考虑,推荐要求认证),与混合连接服务建立WebSocket连接,最终会与一个监听者建立起连接,从而进行沟通。

构建混合应用方式之Azure混合连接

 private  const  string  ConnectionString =,“connection  string  with  send 许可”;//,Connectvar  client =, new  HybridConnectionClient (ConnectionString);
  HybridConnectionStream relayConnection = await client.CreateConnectionAsync();// Writevar writer = new StreamWriter(relayConnection) { AutoFlush = true };await writer.WriteLineAsync("hello from outside");// Closeawait relayConnection.CloseAsync(CancellationToken.None);

当然,因为搭建的WebSocket是双向通道,所以本地服务端也可以发送消息到外部服务端的。

连接字符串

前面提到需要用到不同权限的连接字符串,总共有三种权限管理,监听和发送,可以根据需要创建不同权限搭配的安全访问策略,然后在它的具体界面里会自动生成相应的连接字符串,直接复制使用即可,如下图。

构建混合应用方式之Azure混合连接

如果本地服务不能或者不希望被修改成调用SDK,比如云端Web App调用本地的Web Api或者SQL数据库,那该如何使用混合连接呢?Azure Web App已经整合里混合连接,可以很方便的配置,而不需要对本地服务做任何修改。

构建混合应用方式之Azure混合连接