练习 - 通过 Azure 中继混合连接发送请求

已完成

客户端应用中的代码必须连接到 Azure 中继并向其进行身份验证,然后应用才能发送和接收消息。

已为信用检查服务创建了中继。 现在,你需要启用本地侦听器组件来连接到中继,使它可以接收请求和发送响应。 还需要完成客户端应用中的代码,此代码向中继发送信用检查请求并等待响应。 通过以这种方式连接到中继服务,你可以将服务公开给云中的组件,而无需打开本地防火墙上的端口。 这种方法有助于保护信用检查服务。

在此单元中,你将在发送器和侦听器应用程序中编写 Azure 中继代码。

克隆示例应用

你有两个命令行应用,这些应用将向你先前创建的中继发送消息并侦听来自此中继的消息。 大部分代码已完成,但必须将 Azure 中继代码添加到应用中。 让我们从获取代码开始:

  • 在 Azure Cloud Shell 的右侧,使用 git 克隆示例应用:

    git clone https://github.com/MicrosoftDocs/mslearn-expose-hybrid-services-with-azure-relay.git
    

配置侦听器应用

首先,让我们确保侦听器应用可以连接到中继。 应用需要命名空间的地址、混合连接的名称、密钥名称和主连接密钥,这些都已经在文本文件中保存。

  1. 将目录更改为侦听器应用的起始代码,然后启动代码编辑器:

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener
    code Program.cs
    
  2. 在代码中,查找“// 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>";
    
  3. 在代码中,将 <namespace> 替换为先前创建的中继的名称,然后从保存的 AccessKeys.txt 文件复制密钥,并将其粘贴以替换 <your key here>

侦听器应用现在包含连接到 Azure 中的中继并向其进行身份验证所需的所有信息。

响应侦听器应用中的请求

必须将信用检查服务作为侦听器添加到中继,使其接收发送到中继的请求。 你的代码必须将侦听器配置为订阅事件、处理任何请求和构建响应。 例如,信用检查服务必须从请求中获取名称,然后使用该人员的信用历史记录进行响应。 设置侦听器后,调用 OpenAsync() 方法开始侦听请求。

  1. 在侦听器应用的 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"); };
    
  2. 查找“// 从请求中获取名称”注释。 紧接着该注释,添加以下代码:

    TextReader tr = new StreamReader(context.Request.InputStream);
    String requestedName = tr.ReadToEnd();
    Console.WriteLine("A request was received to check credit for: " + requestedName);
    
  3. 查找“// 构建并发送响应”注释。 紧接着该注释,添加以下代码:

    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]);
    }
    
  4. 查找“// 打开侦听器”注释。 紧接着该注释,添加以下代码:

    await listener.OpenAsync();
    Console.WriteLine("Server listening");
    
  5. 若要保存更改,请选择 Ctrl+S,然后选择 Ctrl+Q 关闭编辑器。

配置发送器应用

要检查客户信用记录的应用会向中继发送请求,中继会将其转发给侦听器。 对于侦听器,可以使用中继的连接详细信息配置发送器应用。

  1. 在 Cloud Shell 中,将目录更改为发送器应用的起始代码,然后启动代码编辑器:

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender
    code Program.cs
    
  2. 在“文件”窗口中,选择“Program.cs”。

  3. 查找“// 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>";
    
  4. 在代码中,将 <namespace> 替换为先前创建的中继的名称,然后从先前保存的 AccessKeys.txt 文件复制密钥,并将其粘贴以替换 <your key here>

提示

不要忘记删除 AccessKeys.txt。 在生产代码中,将这些值保存在安全的位置,例如 Azure Key Vault

发送器应用现在包含连接到 Azure 中的中继并向其进行身份验证所需的所有信息。

发送来自发送器应用的请求

若要请求信用检查,发送器应用会在 HTTP GET 请求中向中继发送一个名称。 让我们编写构建该请求的代码。

  1. 在发送器应用的 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);
    
  2. 查找“// 发送请求”注释。 紧接着该注释,添加以下代码:

    var response = await client.SendAsync(request);
    
  3. 查找“// 显示结果”注释。 紧接着该注释,添加以下代码:

    Console.WriteLine(await response.Content.ReadAsStringAsync());
    
  4. 若要保存更改,请选择 Ctrl+S,然后选择 Ctrl+Q 关闭编辑器。

启动应用

侦听器和发送器应用已完成。 你现可运行两个应用,使用发送器请求信用检查,然后观察两个应用中的结果。 若要同时运行这两个应用,请使用 Cloud Shell 的第二个实例来托管发送器。

  1. 在 Cloud Shell 中,若要生成和运行侦听器应用,请运行以下命令:

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/listener
    dotnet run
    
  2. 当收到“服务器侦听”消息时,可以启动发送器。 打开浏览器的新实例,并转到欢迎使用 Azure Cloud Shell 页面。

  3. 如果系统提示你选择目录,请选择“Microsoft Learn 沙盒”。

  4. 若要生成并运行发送器应用,请运行以下命令:

    cd ~/mslearn-expose-hybrid-services-with-azure-relay/starter/sender
    dotnet run
    

测试应用

现在,这两个应用都在单独的 Cloud Shell 实例中运行,让我们通过检查信用记录来测试这些应用。

  1. 排列浏览器窗口,以便同时查看两者。

  2. 在发送器应用中,键入名称,然后按 Enter

    在侦听器应用中,应会显示你输入的名称。

    在发送器应用中,系统将显示来自侦听器的答复以及信用检查的结果。

  3. 若要退出发送器应用,请按 Enter。 你可以重新运行应用以检查其他名称。 完成后,关闭浏览器窗口。

  4. 若要退出侦听器应用,请选择 Ctrl+C