У меня есть клиентская программа (приложение WPF на. Net 4.8) и веб-API (. Net Core 3.1). Я пытаюсь заставить их общаться через SignalR Core. Он отлично работает, когда оба работают локально на моем P C (то есть на локальном хосте). Но как только я публикую sh мой API в Azure Службе приложений (и указываю приложению WPF на новый URL), он не работает. SignalR устанавливает соединение, но когда API отправляет данные в приложение WPF, приложение никогда не получает их.
Я не уверен, связано ли это с CORS. CORS на Azure Служба приложений отключена. В моем веб-API я вот этот Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
);
});
string connectionString = Configuration.GetConnectionString("eBallDatabase");
services.AddDbContext<EBallContext>(options =>
options.UseSqlServer(connectionString));
var config = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.AddProfile(new AutoMapperProfileConfiguration());
});
var mapper = config.CreateMapper();
services.AddSingleton(mapper);
services.AddSignalR(options =>
{
options.EnableDetailedErrors = true;
});
services.AddApplicationInsightsTelemetry();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseCors("corsPolicy");
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapHub<ChatHub>("/chatHub");
});
}
Я думаю, что однажды прочитал, что у вас не может быть AllowAnyOrigin () с SignalR. Вам необходимо указать желаемое происхождение. Но я не уверен, каким будет мое происхождение, так как это приложение WPF, работающее на компьютерах разных пользователей, все с разными доменами / IP-адресами.
Как я уже сказал, оно отлично работает, когда все находится на loclahost. Но как только API включается в Azure Службу приложений, им удается установить sh соединение SignalR, но это все. Приложение WPF не получает данных от API.
Есть идеи?