我正在尝试从Azure事件中心接收数据,并使用signalR在.NET Core 2.1 Web App上显示它们。我已经按照本教程https://docs.microsoft.com/en-us/azure/event-hubs/event-hubs-dotnet-standard-getstarted-receive-eph进行了操作,所有内容都可以在.net核心控制台应用程序上使用。但是我一直坚持如何在Web应用程序中实现这一点。我仍然是Web应用程序的新手,所以也许我的问题很琐碎。 这是主要的网络应用代码
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
教程中负责部署事件处理器的代码的一部分位于MainAsync(string [] args)
中 private static async Task MainAsync(string[] args)
{
Console.WriteLine("Registering EventProcessor...");
var eventProcessorHost = new EventProcessorHost(
EventHubName,
PartitionReceiver.DefaultConsumerGroupName,
EventHubConnectionString,
StorageConnectionString,
StorageContainerName);
// Registers the Event Processor Host and starts receiving messages
await eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>();
Console.WriteLine("Receiving. Press ENTER to stop worker.");
Console.ReadLine();
// Disposes of the Event Processor Host
await eventProcessorHost.UnregisterEventProcessorAsync();
}
这是我的问题。如何运行MainAsync和运行Web应用程序?如果我这样做
public static void Main(string[] args)
{
MainAsync(args);
CreateWebHostBuilder(args).Build().Run();
}
一切都可以编译,但是事件中心中有新事件时什么也没发生,我不知道为什么以及如何解决这个问题
答案 0 :(得分:0)
对于Web应用程序,情况有所不同。有几种方法可以做到这一点。
1)如果将应用程序托管在Azure App服务中,则创建一个Web作业。
2)您利用天蓝色事件网格。您需要在.Net Core中创建将接收事件的Web挂钩(控制器)。事件中心将事件发送到Web挂钩(事件中心使用事件网格来执行此操作)。您在事件中心中创建Web钩子,并在其中提供控制器URL。
3)您的应用程序订阅了事件。我还没有看到具体的示例,但是这个示例可能会给您提示。 https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/multi-container-microservice-net-applications/subscribe-events