.NET 如何 运行 在与监听服务总线相同的进程中使用 http 服务器
.NET How to run http server in same process as listening to servicebus
我正在尝试将 HTTP 功能添加到一个已经存在的应用程序,该应用程序 'listening' 用于事件中心发送的事件。
事件侦听器异步工作并像这样初始化:
var tasks = new List<Task>();
foreach (string hub in hubs) {
tasks.Add(ReceiveMessagesHubAsync(hub, cancel.Token));
}
Task.WaitAll(tasks.ToArray());
我正在使用 WebApi 和 OWIN-SelfHost 创建我的 HTTP 服务器。像这样启动:
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.WriteLine("Web server running at: {0}", baseAddress);
Thread.Sleep(-1);
}
如果我也监听事件,网络服务器没有响应。如果我禁用事件监听(注释掉 Task.WaitAll()
操作),那么网络服务器就可以工作。
我尝试在异步事件中心代码之前移动 WebApp.Start
并删除 Thread.Sleep()
操作,但这也会阻止网络服务器运行。
现在我明白这是一个线程问题,但我不知道如何解决它。我应该在新线程中执行网络服务器初始化吗?还是有其他(内置)方式,我是否使问题过于复杂?
根据我看到的 documentation,除了确保所有逻辑都在 using
语句中外,应该没有什么特别之处。
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.WriteLine("Web server running at: {0}", baseAddress);
var tasks = new List<Task>();
foreach (string hub in hubs) {
tasks.Add(ReceiveMessagesHubAsync(hub, cancel.Token));
}
Task.WaitAll(tasks.ToArray());
}
Console.WriteLine ("Web server shut dow");
只要您超出 using
语句,您的 WebApp
就会被处理掉,它将不再侦听事件。如果 class 的结构方式不适合将所有内容保存在一个 using
语句中,那么您可以将 WebApp
存储为 class 变量,当您的整个class 正在处理,您只需处理那个 WebApp
实例。
我正在尝试将 HTTP 功能添加到一个已经存在的应用程序,该应用程序 'listening' 用于事件中心发送的事件。
事件侦听器异步工作并像这样初始化:
var tasks = new List<Task>();
foreach (string hub in hubs) {
tasks.Add(ReceiveMessagesHubAsync(hub, cancel.Token));
}
Task.WaitAll(tasks.ToArray());
我正在使用 WebApi 和 OWIN-SelfHost 创建我的 HTTP 服务器。像这样启动:
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.WriteLine("Web server running at: {0}", baseAddress);
Thread.Sleep(-1);
}
如果我也监听事件,网络服务器没有响应。如果我禁用事件监听(注释掉 Task.WaitAll()
操作),那么网络服务器就可以工作。
我尝试在异步事件中心代码之前移动 WebApp.Start
并删除 Thread.Sleep()
操作,但这也会阻止网络服务器运行。
现在我明白这是一个线程问题,但我不知道如何解决它。我应该在新线程中执行网络服务器初始化吗?还是有其他(内置)方式,我是否使问题过于复杂?
根据我看到的 documentation,除了确保所有逻辑都在 using
语句中外,应该没有什么特别之处。
using (WebApp.Start<Startup>(url: baseAddress))
{
Console.WriteLine("Web server running at: {0}", baseAddress);
var tasks = new List<Task>();
foreach (string hub in hubs) {
tasks.Add(ReceiveMessagesHubAsync(hub, cancel.Token));
}
Task.WaitAll(tasks.ToArray());
}
Console.WriteLine ("Web server shut dow");
只要您超出 using
语句,您的 WebApp
就会被处理掉,它将不再侦听事件。如果 class 的结构方式不适合将所有内容保存在一个 using
语句中,那么您可以将 WebApp
存储为 class 变量,当您的整个class 正在处理,您只需处理那个 WebApp
实例。