Asp.net core 我的AspnetCore应用程序不通过信号器从.net core控制台应用程序接收发布
我的AspnetCore应用程序不通过信号器从.net core控制台应用程序接收发布 我有一个包含信号集线器的aspnet core 2.1 web应用程序 我需要制作一个.NETCore2.1控制台应用程序,将信息发送到web系统上的中心 我在这里做了一个开发,但是当我运行我的控制台应用程序时,没有出现异常,但是我的web应用程序没有收到信息 看看我到目前为止做了什么 Aspnet核心2.1Asp.net core 我的AspnetCore应用程序不通过信号器从.net core控制台应用程序接收发布,asp.net-core,.net-core,signalr,Asp.net Core,.net Core,Signalr,我的AspnetCore应用程序不通过信号器从.net core控制台应用程序接收发布 我有一个包含信号集线器的aspnet core 2.1 web应用程序 我需要制作一个.NETCore2.1控制台应用程序,将信息发送到web系统上的中心 我在这里做了一个开发,但是当我运行我的控制台应用程序时,没有出现异常,但是我的web应用程序没有收到信息 看看我到目前为止做了什么 Aspnet核心2.1 public class Startup { public Startup(
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession();
services.Configure<CookiePolicyOptions>(options =>
{
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddSignalR();
services.AddMvc(
config => {
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
config.Filters.Add(new AuthorizeFilter(policy));
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddAuthentication(options =>
{
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options =>
{
options.ExpireTimeSpan = TimeSpan.FromDays(1);
options.LoginPath = "/Home/Login";
options.LogoutPath = "/Usuario/Logout";
options.SlidingExpiration = true;
});
//provedor postgresql
services.AddEntityFrameworkNpgsql()
.AddDbContext<MesContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("MesContext")));
services.AddScoped<SeedingService>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, SeedingService seedingService)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
seedingService.Seed();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
app.UseSignalR(routes =>
{
routes.MapHub<MesHub>("/MesHub");
});
}
}
枢纽
公共类MesHub:Hub
{
公共静态ConcurrentDictionary ConnectedUsers=新ConcurrentDictionary();
公共无效SendAsync(字符串消息)
{
//在所有客户端上调用addMessage方法
Clients.All.SendAsync(“teste”,true,message);
}
公共覆盖任务OnConnectedAsync()
{
字符串名称=Context.User.Identity.name;
AddToGroupAsync(Context.ConnectionId,name);
返回base.OnConnectedAsync();
}
}
控制台应用
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Teste Renan!");
var url = "https://localhost:44323/meshub";
var connection = new HubConnectionBuilder()
.WithUrl($"{url}")
.WithAutomaticReconnect() //I don't think this is totally required, but can't hurt either
.Build();
var t = connection.StartAsync();
Console.WriteLine("conected!");
//Wait for the connection to complete
t.Wait();
Console.WriteLine(connection.State);
//connection.SendAsync("SendAsync", "renan");
connection.InvokeAsync<string>("SendAsync", "HELLO World ").ContinueWith(task => {
if (task.IsFaulted)
{
Console.WriteLine("There was an error calling send: {0}",
task.Exception.GetBaseException());
}
else
{
Console.WriteLine(task.Result);
}
});
Console.WriteLine("enviado!");
}
}
类程序
{
静态void Main(字符串[]参数)
{
控制台。WriteLine(“Teste Renan!”);
变量url=”https://localhost:44323/meshub";
var connection=new HubConnectionBuilder()
.WithUrl($“{url}”)
.WithAutomaticReconnect()//我不认为这完全是必需的,但也不会有什么坏处
.Build();
var t=connection.StartAsync();
Console.WriteLine(“conconnected!”);
//等待连接完成
t、 等待();
Console.WriteLine(connection.State);
//SendAsync(“SendAsync”、“renan”);
connection.InvokeAsync(“SendAsync”,“HELLO World”).ContinueWith(任务=>{
if(task.IsFaulted)
{
WriteLine(“调用send:{0}时出错”,
task.Exception.GetBaseException());
}
其他的
{
Console.WriteLine(task.Result);
}
});
Console.WriteLine(“enviado!”);
}
}
在控制台应用程序中,我添加了Microsoft.aspnetCore.SignalR.Client包
Signalr在aspnet核心web系统中运行良好,因为它不从外部接收信息
我忘了什么?我做错了什么?我定义了相同的hub方法,并进行了一个测试,从控制台客户端调用它,该方法按预期工作 此外,我用我的信号器控制台客户端应用程序测试了它,它也工作得很好。如果可能,您可以测试它并检查它是否适合您
static void Main(字符串[]args)
{
Console.WriteLine(“客户端应用程序启动…”);
程序p=新程序();
p、 Myfunc().Wait();
Console.ReadLine();
}
公共异步任务Myfunc()
{
HubConnection=新的HubConnectionBuilder()
.WithUrl(“https://localhost:44323/meshub")
.Build();
connection.Closed+=异步(错误)=>
{
等待任务。延迟(新随机()。下一个(0,5)*1000);
等待连接。StartAsync();
};
等待连接。StartAsync();
尝试
{
等待连接;
//等待连接。调用Easync(“发送消息”、“控制台应用程序”、“测试mes”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
测试结果
更新:
在我的集线器中,我有一个OnConnectedAsync方法,其中通知组的名称
您可以尝试如下更新OnConnectedAsync
方法,然后检查您的SignalR console客户端应用程序是否可以连接到hub并与web客户端良好通信
public override async Task OnConnectedAsync()
{
string name = Context.User.Identity.Name;
if (name != null)
{
await Groups.AddToGroupAsync(Context.ConnectionId, name);
}
await base.OnConnectedAsync();
}
我定义了同一个hub方法,并做了一个测试,从控制台客户端调用它,该客户端按预期工作 此外,我用我的信号器控制台客户端应用程序测试了它,它也工作得很好。如果可能,您可以测试它并检查它是否适合您
static void Main(字符串[]args)
{
Console.WriteLine(“客户端应用程序启动…”);
程序p=新程序();
p、 Myfunc().Wait();
Console.ReadLine();
}
公共异步任务Myfunc()
{
HubConnection=新的HubConnectionBuilder()
.WithUrl(“https://localhost:44323/meshub")
.Build();
connection.Closed+=异步(错误)=>
{
等待任务。延迟(新随机()。下一个(0,5)*1000);
等待连接。StartAsync();
};
等待连接。StartAsync();
尝试
{
等待连接;
//等待连接。调用Easync(“发送消息”、“控制台应用程序”、“测试mes”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
}
测试结果
更新:
在我的集线器中,我有一个OnConnectedAsync方法,其中通知组的名称
您可以尝试如下更新OnConnectedAsync
方法,然后检查您的SignalR console客户端应用程序是否可以连接到hub并与web客户端良好通信
public override async Task OnConnectedAsync()
{
string name = Context.User.Identity.Name;
if (name != null)
{
await Groups.AddToGroupAsync(Context.ConnectionId, name);
}
await base.OnConnectedAsync();
}
如果调试集线器方法,当您从控制台客户端应用程序调用它时,它是否会命中预期的方法?不是。到目前为止,我已经找到了导致问题的原因,在我的集线器中,我有一个通知组名称的OnConnectedAsync方法,因为没有应用程序控制台,我没有设置组,因此它没有连接。
在我的集线器中,我有一个通知组名称的OnConnectedAsync方法
Hi@Renan,请检查我的新更新。如果调试集线器方法,当您从控制台客户端应用程序调用它时,它是否达到预期的方法?不是。到目前为止,我已经找到了导致问题的原因,在我的集线器中,我有一个OnConnectedAsync
public override async Task OnConnectedAsync()
{
string name = Context.User.Identity.Name;
if (name != null)
{
await Groups.AddToGroupAsync(Context.ConnectionId, name);
}
await base.OnConnectedAsync();
}