我是新使用SignalR的,我试图在一个. net控制台上设置一个服务器,我将在一个Win服务器2012中执行。我花了3天的时间在YouTube/谷歌等,但不能处理它时,我在不同的PC上执行服务器。在我的PC上,我可以成功地连接客户端和服务器。
我的目标是获得实时更新与MS SQL,实体Framework7和不同的客户端在Winforms在net核心7,服务器(不关心是否是. net框架或. net核心).
我在服务器端有这样的代码:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
using serverPTP.Hubs;
using Microsoft.Extensions.Logging;
class Program{
static void Main(string[] args)
{
try
{
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
EnvironmentName = Environments.Production
});
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Services.AddSignalR();
var app = builder.Build();
app.Urls.Add("http://localhost:some port");
app.MapHub<HubPTP>("/Hubs/HubPTP");
app.UseHsts();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
Console.WriteLine("3 seg for RUN:");
Thread.Sleep(3000);
app.Run();
Console.WriteLine("Continue..");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine(ex.StackTrace);
if(ex.InnerException != null)
{
Console.WriteLine(ex.InnerException.ToString());
}
}
}
}
如果我运行这个应用程序工作,如果我安装这个应用程序在我的电脑工作,但在我的windows server 2012不工作。我没有错误消息,只是inmediatelly后app. run()关闭控制台...代码中有什么错误?
我使用的是NuGet软件包Microsoft. AspNetCore. SignalR. Client 7.0.3
- 更新**
现在我也在尝试把它放到网络环境中。
Program.cs
builder.Services.AddCors(options => {
options.AddPolicy("AllowOrigin", builder =>
builder.WithOrigins(new[] { "http://localhost:80", "https://localhost:80" })
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials()
.SetIsOriginAllowed((host) => true)); //for signalr cors
});
builder.WebHost.CaptureStartupErrors(true);
builder.Logging.ClearProviders();
builder.Logging.AddConsole();
builder.Services.AddControllers();
builder.Services.AddSignalR(hubOptions =>
{
hubOptions.EnableDetailedErrors = true;
hubOptions.KeepAliveInterval = TimeSpan.FromMinutes(1);
});
// CORS Policies
//builder.Services.AddCors(p => p.AddPolicy("corsapp", builder =>
//{
// builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader();
//}));
var app = builder.Build();
app.MapHub<HubPTP>("/HubPTP", options =>
{
Console.WriteLine($"Authorization data items: {options.AuthorizationData.Count}");
});
// Enable Cors
app.UseCors();
app.UseRouting();
app.Run();
launchSettings.json
{
"profiles": {
"http": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"dotnetRunMessages": true,
"applicationUrl": "http://172.28.8.2:80"
},
"https": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
},
"dotnetRunMessages": true,
"applicationUrl": "https://172.168.8.2:80",
"remoteDebugEnabled": true
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
},
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://172.28.8.2:8006/Hubs/HubPTP",
"sslPort": 8006
}
}
}
我无法更改端口,在Visual Studio中,我可以更改端口,并且在启动应用程序时工作正常,但在安装应用程序时端口不会更改。在Visual Studio之外,它始终位于端口5000。
- 编辑-工作**最后,在@Blindy回答我的信号服务器工作,我可以连接到他从我自己的电脑。
var app = builder.Build();
app.Urls.Add($"http://*:5000");
app.MapHub<HubPTP>("/Hubs/HubPTP");
app.UseStaticFiles();
app.UseRouting();
app.Run();
用这个方法在我的情况下没有工作:app.UseHsts();
所以我删除了这一行。
1条答案
按热度按时间rfbsl7qr1#
服务器是在一台PC与Windows Server 2012,我试图从我的PC Win 11连接
套接字的起始URI是错误的,
http://localhost:5000
意味着它将只绑定到本地计算机 * 上的套接字 *。这就是为什么您会在启动屏幕上看到它,正确设置它非常重要。你想要的URI是
http://*:5000
,或者你想要使用的任何端口,这意味着它将绑定到 * 任何 * 传入套接字。