SignalR服务器在winforms控制台与C# .net 7

qrjkbowd  于 2023-03-09  发布在  C#
关注(0)|答案(1)|浏览(214)

我是新使用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();所以我删除了这一行。

rfbsl7qr

rfbsl7qr1#

服务器是在一台PC与Windows Server 2012,我试图从我的PC Win 11连接
套接字的起始URI是错误的,http://localhost:5000意味着它将只绑定到本地计算机 * 上的套接字 *。这就是为什么您会在启动屏幕上看到它,正确设置它非常重要。
你想要的URI是http://*:5000,或者你想要使用的任何端口,这意味着它将绑定到 * 任何 * 传入套接字。

相关问题