У меня есть приложение WEB API в ASP.NET Core с SignalR (клиент JavaScript). пожалуйста, посмотрите мою конфигурацию запуска ниже
public IServiceProvider ConfigureServices(IServiceCollection services)
{
....................................
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
policy => policy.WithOrigins(Configuration.GetSection("ApplicationPortalURL").Value)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
............................................
services.AddSingleton<MyHub>();
services.AddSignalR();
............................................
services.AddMvc();
.AddControllersAsServices()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
var builder = new ContainerBuilder();
builder.Populate(services);
ApplicationContainer = builder.Build();
return new AutofacServiceProvider(ApplicationContainer);
}
public async void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime lifetime)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("CorsPolicy");
app.UseSignalR(routes =>
{
routes.MapHub<MyHub>("/MyHub");
});
app.UseMvc();
var bus = ApplicationContainer.Resolve<IBusControl>();
await Task.Run(() =>
{
var busHandle = TaskUtil.Await(() => bus.StartAsync());
lifetime.ApplicationStopping.Register(() => busHandle.Stop());
});
}
HUB Class
public class MyHub : Hub
{
public static HashSet<string> CurrentConnections = new HashSet<string>();
public async override Task OnConnectedAsync()
{
await base.OnConnectedAsync();
}
public async override Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
}
public async Task SendMessage(string message)
{
await Clients.All.SendAsync("sendmessage", message);
}
}
Javascript
const connection = new signalR.HubConnectionBuilder()
.withUrl("http://localhost:33300/MyHub", {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets
}).build();
connection.on("sendmessage", (message) => {
debugger;
altert(message);
});
connection.start().then(function (client) {
console.log('Signal r connection started.');
console.log(client);
}).catch(function (err) {
return console.error(err);
});
Все работаетнормально в части сайта. Но у меня тоже есть клиент WPF.
Клиент WPF
namespace WpfAppSignalRClient
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
InitializeSignalR();
}
private void InitializeSignalR()
{
try
{
var hubConnection = new HubConnection("http://localhost:33300/");
var prestoHubProxy = hubConnection.CreateHubProxy("MyHub");
prestoHubProxy.On<string>("sendmessage", (message) =>
{
MessageBox.Show(message);
});
hubConnection.Start();
}
catch (System.Exception ex)
{
throw ex;
}
}
}
}
Я хочу отправить сообщение SingalR из веб-API в WPF,Я имею в виду, я ожидаю, что сообщение появится в WPF в то же время, когда сообщение отображается на веб-странице. Теперь сообщения SignalR отображаются только на сайте. это не отображается в приложении WPF. Пожалуйста, совет, если у вас есть идеи.
Спасибо