【问题标题】:Configuring Azure's Event Hub to receive events from ASP.NET MVC web application配置 Azure 的事件中心以接收来自 ASP.NET MVC Web 应用程序的事件
【发布时间】:2021-09-10 23:47:33
【问题描述】:

有人可以为我指出正确的方向,了解如何在事件中心内配置网络设置,以便我可以在本地运行(本地主机)以及在 azure 开发中部署应用程序时通过 ASP.NET MVC 应用程序成功发送数据/qa/生产网络环境。

我已经在本地的 .NET 中构建了一个概念验证控制台应用程序,并且在 Azure 的 EventHub 端在网络/防火墙设置中添加了我的 IP 地址,并且从本地计算机发送数据和接收数据没有问题。

但是当我在 ASP.NET MVC Web 应用程序中尝试相同的代码时,页面只是挂在CreateBatchAsync() 方法上并且没有返回任何异常..

var producerClient = new EventHubProducerClient(connectionString, eventHubName);

EventDataBatch eventBatch = await producerClient.CreateBatchAsync();

eventBatch.TryAdd(new EventData(Encoding.UTF8.GetBytes("Event 1z at " + DateTime.Now.ToString())));
           
await producerClient.SendAsync(eventBatch); 

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: asp.net asp.net-mvc azure azure-eventhub


    【解决方案1】:

    CreateBatchAsync 的调用是您的代码中请求网络操作的第一个点,因此将触发创建连接并链接到事件中心服务。连接尝试有一个与之关联的超时,在您使用的默认配置中为 60 秒。根据遇到的错误,您可能会看到重试发生,每一次都会有 60 秒的超时。使用默认配置,这看起来像是 3 分钟的挂起。 (60 秒 * 3 次尝试)

    企业环境中最常见的连接问题是 AMQP over TCP (5671/5672) 所需的端口未打开。通过 WebSockets 将传输更改为 AMQP 通常会有所帮助,因为它将使用端口 443,并且可以根据需要通过代理进行路由。

    有关更多信息,您可能需要查看configuring Event Hubs clientsEvent Hubs network troubleshooting guide 的示例。

    【讨论】:

    • 感谢您的信息,非常有用。但仍然没有运气,我在测试控制台应用程序中发送数据没有问题。当我尝试在本地使用本地主机时从 MVC 应用程序运行相同的脚本时 - 它只是挂在 producerClient.CreateBatchAsync();线。我很确定 443 端口是开放的,并且我使用了 AmqpWebSockets 传输类型。
    • 看来我们可能想开始偷窥了;我建议使用 AzureEventSourceListener 捕获 SDK 发出的 ETW 日志。 sample。以下事件 id 将是最有趣的:3-5、55-67、
    • 谢谢杰西,我会试一试的。只是出于好奇 - 甚至可以在本地 Web 环境中运行代码时将事件中心称为生产者,同时指向您的本地主机?我刚刚和我的网络管理员谈过,他提到为了让它工作,我必须以某种方式保持端口开放,并开放一些第三方
    • 问题已解决 - 感谢您的反馈 Jesse
    • 当然,我试图从同步的 MVC 控制器方法调用包含事件中心客户端的异步任务方法。最初找到了一个允许我访问它的工作 - 但它只是挂在 producerClient.CreateBatchAsync();线。所以起初我认为这与端口有关。为了解决这个问题,我必须将控制器方法转换为异步任务方法。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2017-05-29
    • 2017-06-19
    • 2019-05-19
    相关资源
    最近更新 更多