以下是与WCF中继的一个对比表:,
,
下面主要分三种情况来介绍混合连接的使用:
一只基于混合连接SDK
二只基于Azure web应用程序混合连接工具
三只基于PortBridge示例程序
,
<人力资源/>,创建混合连接
可以登陆Azure中国门户网站,按照界面提示一步步创建。也可以通过PowerShell命令,如下。
#, 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个监听者。
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连接,最终会与一个监听者建立起连接,从而进行沟通。
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是双向通道,所以本地服务端也可以发送消息到外部服务端的。
连接字符串
前面提到需要用到不同权限的连接字符串,总共有三种权限管理,监听和发送,可以根据需要创建不同权限搭配的安全访问策略,然后在它的具体界面里会自动生成相应的连接字符串,直接复制使用即可,如下图。
如果本地服务不能或者不希望被修改成调用SDK,比如云端Web App调用本地的Web Api或者SQL数据库,那该如何使用混合连接呢?Azure Web App已经整合里混合连接,可以很方便的配置,而不需要对本地服务做任何修改。