【发布时间】:2021-09-06 03:29:39
【问题描述】:
我想使用 .NetCore 在控制台应用程序中创建 SignalR 自托管服务器。
我对 Web 开发和 .Net Core 完全陌生,但希望将 SignalR 用作基于 Web 的实时协议。不需要网页,所以我想要一个控制台应用程序。
我已经成功测试了下面的 .Net Framework 示例,并希望使用 .Net Core 3.1 复制它,以便它可以在 Linux 上运行。但是我找不到任何合适的例子。
using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;
namespace SignalRSelfHost
{
class Program
{
static void Main(string[] args)
{
// This will *ONLY* bind to localhost, if you want to bind to all addresses
// use http://*:8080 to bind to all addresses.
// See http://msdn.microsoft.com/library/system.net.httplistener.aspx
// for more information.
string url = "http://localhost:8088";
using (WebApp.Start<Startup>(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
public class MyHub : Hub
{
public void Send(string name, string message)
{
Clients.All.addMessage(name, message);
Clients.All.addMessage(name, "World");
}
}
}
在尝试使用 Owin 创建服务器控制台应用程序时,我有以下代码并且可以编译,但是在运行程序时抱怨没有注册服务器服务。有人可以建议添加什么以使没有网页的网络服务器?我复制的示例指定了 UseKestrel() 但我认为这是针对网页的,所以我认为我需要其他内容。
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
namespace OwinConsole
{
public class Startup
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app)
{
app.UseOwin(pipeline =>
{
pipeline(next => OwinHello);
});
}
public Task OwinHello(IDictionary<string, object> environment)
{
string responseText = "Hello World via OWIN";
byte[] responseBytes = Encoding.UTF8.GetBytes(responseText);
// OWIN Environment Keys: http://owin.org/spec/spec/owin-1.0.0.html
var responseStream = (Stream)environment["owin.ResponseBody"];
var responseHeaders = (IDictionary<string, string[]>)environment["owin.ResponseHeaders"];
responseHeaders["Content-Length"] = new string[] { responseBytes.Length.ToString(CultureInfo.InvariantCulture) };
responseHeaders["Content-Type"] = new string[] { "text/plain" };
return responseStream.WriteAsync(responseBytes, 0, responseBytes.Length);
}
}
}
using System.IO;
using Microsoft.AspNetCore.Hosting;
namespace OwinConsole
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
谢谢。
【问题讨论】:
-
为什么不从 SignalR 模板开始并删除网页端点? docs.microsoft.com/en-us/aspnet/core/tutorials/…
-
谢谢,我试试这个。
标签: asp.net-core signalr asp.net-core-3.1 self-hosting