练习 - 通过 Azure 中继混合连接发送请求
客户端应用中的代码必须连接到 Azure 中继并向其进行身份验证,然后应用才能发送和接收消息。
已为信用检查服务创建了中继。 现在,你需要启用本地侦听器组件来连接到中继,使它可以接收请求和发送响应。 还需要完成客户端应用中的代码,此代码向中继发送信用检查请求并等待响应。 通过以这种方式连接到中继服务,你可以将服务公开给云中的组件,而无需打开本地防火墙上的端口。 这种方法有助于保护信用检查服务。
在此单元中,你将在发送器和侦听器应用程序中编写 Azure 中继代码。
克隆示例应用
你有两个命令行应用,这些应用将向你先前创建的中继发送消息并侦听来自此中继的消息。 大部分代码已完成,但必须将 Azure 中继代码添加到应用中。 让我们从获取代码开始:
在 Azure Cloud Shell 的右侧,使用
git
克隆示例应用:git clone https://github.com/MicrosoftDocs/mslearn-expose-hybrid-services-with-azure-relay.git
配置侦听器应用
首先,让我们确保侦听器应用可以连接到中继。 应用需要命名空间的地址、混合连接的名称、密钥名称和主连接密钥,这些都已经在文本文件中保存。
将目录更改为侦听器应用的起始代码,然后启动代码编辑器:
cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener code Program.cs
在代码中,查找“// Azure 中继的详细信息”注释。 紧接着该注释,添加以下代码:
private const string RelayNamespace = "<namespace>.servicebus.windows.net"; private const string ConnectionName = "creditcheckconnection"; private const string KeyName = "RootManageSharedAccessKey"; private const string Key = "<your key here>";
在代码中,将
<namespace>
替换为先前创建的中继的名称,然后从保存的 AccessKeys.txt 文件复制密钥,并将其粘贴以替换<your key here>
。
侦听器应用现在包含连接到 Azure 中的中继并向其进行身份验证所需的所有信息。
响应侦听器应用中的请求
必须将信用检查服务作为侦听器添加到中继,使其接收发送到中继的请求。 你的代码必须将侦听器配置为订阅事件、处理任何请求和构建响应。 例如,信用检查服务必须从请求中获取名称,然后使用该人员的信用历史记录进行响应。 设置侦听器后,调用 OpenAsync()
方法开始侦听请求。
在侦听器应用的 Program.cs 代码文件中,查找“// 订阅状态事件”注释。 紧接着该注释,添加以下代码:
listener.Connecting += (o, e) => { Console.WriteLine("Connecting"); }; listener.Offline += (o, e) => { Console.WriteLine("Credit check service is offline"); }; listener.Online += (o, e) => { Console.WriteLine("Credit check service is online"); };
查找“// 从请求中获取名称”注释。 紧接着该注释,添加以下代码:
TextReader tr = new StreamReader(context.Request.InputStream); String requestedName = tr.ReadToEnd(); Console.WriteLine("A request was received to check credit for: " + requestedName);
查找“// 构建并发送响应”注释。 紧接着该注释,添加以下代码:
context.Response.StatusCode = HttpStatusCode.OK; context.Response.StatusDescription = "Credit check successful"; using (var sw = new StreamWriter(context.Response.OutputStream)) { sw.WriteLine("Credit check for {0}: {1}", requestedName, creditStatuses[index]); }
查找“// 打开侦听器”注释。 紧接着该注释,添加以下代码:
await listener.OpenAsync(); Console.WriteLine("Server listening");
若要保存更改,请选择 Ctrl+S,然后选择 Ctrl+Q 关闭编辑器。
配置发送器应用
要检查客户信用记录的应用会向中继发送请求,中继会将其转发给侦听器。 对于侦听器,可以使用中继的连接详细信息配置发送器应用。
在 Cloud Shell 中,将目录更改为发送器应用的起始代码,然后启动代码编辑器:
cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender code Program.cs
在“文件”窗口中,选择“Program.cs”。
查找“// Azure 中继的详细信息”注释。 紧接着该注释,添加以下代码:
private const string RelayNamespace = "<namespace>.servicebus.windows.net"; private const string ConnectionName = "creditcheckconnection"; private const string KeyName = "RootManageSharedAccessKey"; private const string Key = "<your key here>";
在代码中,将
<namespace>
替换为先前创建的中继的名称,然后从先前保存的 AccessKeys.txt 文件复制密钥,并将其粘贴以替换<your key here>
。
提示
不要忘记删除 AccessKeys.txt。 在生产代码中,将这些值保存在安全的位置,例如 Azure Key Vault。
发送器应用现在包含连接到 Azure 中的中继并向其进行身份验证所需的所有信息。
发送来自发送器应用的请求
若要请求信用检查,发送器应用会在 HTTP GET 请求中向中继发送一个名称。 让我们编写构建该请求的代码。
在发送器应用的 Program.cs 代码文件中,查找“// 创建 HttpClient 并构建请求”注释。 紧接着该注释,添加以下代码:
var client = new HttpClient(); var request = new HttpRequestMessage() { RequestUri = uri, Method = HttpMethod.Get, Content = new StringContent(name) }; request.Headers.Add("ServiceBusAuthorization", token);
查找“// 发送请求”注释。 紧接着该注释,添加以下代码:
var response = await client.SendAsync(request);
查找“// 显示结果”注释。 紧接着该注释,添加以下代码:
Console.WriteLine(await response.Content.ReadAsStringAsync());
若要保存更改,请选择 Ctrl+S,然后选择 Ctrl+Q 关闭编辑器。
启动应用
侦听器和发送器应用已完成。 你现可运行两个应用,使用发送器请求信用检查,然后观察两个应用中的结果。 若要同时运行这两个应用,请使用 Cloud Shell 的第二个实例来托管发送器。
在 Cloud Shell 中,若要生成和运行侦听器应用,请运行以下命令:
cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener dotnet run
当收到“服务器侦听”消息时,可以启动发送器。 打开浏览器的新实例,并转到欢迎使用 Azure Cloud Shell 页面。
如果系统提示你选择目录,请选择“Microsoft Learn 沙盒”。
若要生成并运行发送器应用,请运行以下命令:
cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender dotnet run
测试应用
现在,这两个应用都在单独的 Cloud Shell 实例中运行,让我们通过检查信用记录来测试这些应用。
排列浏览器窗口,以便同时查看两者。
在发送器应用中,键入名称,然后按 Enter。
在侦听器应用中,应会显示你输入的名称。
在发送器应用中,系统将显示来自侦听器的答复以及信用检查的结果。
若要退出发送器应用,请按 Enter。 你可以重新运行应用以检查其他名称。 完成后,关闭浏览器窗口。
若要退出侦听器应用,请选择 Ctrl+C。