【发布时间】:2020-05-13 04:50:59
【问题描述】:
我有一个客户端程序(.Net 4.8 上的 WPF 应用程序)和一个 Web API(.Net Core 3.1)。 我试图让两者通过 SignalR Core 进行通信。 当两者都在我的 PC 上本地运行时(即在本地主机上),它可以完美运行。 但是,一旦我将我的 API 发布到 Azure App Service(并将 WPF 应用程序指向新的 URL),它就不起作用了。 SignalR 建立连接,但是当 API 向 WPF 应用发送数据时,应用永远不会收到它。
我不确定它是否与 CORS 有关。 Azure 应用服务上的 CORS 已禁用。在我的 Web 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");
});
}
我想我曾经读到过 SignalR 不能使用 AllowAnyOrigin()。您需要指定所需的来源。但我不确定我的来源是什么,因为这是一个运行在不同用户计算机上的 WPF 应用程序,所有用户的计算机都具有不同的域/IP 地址。
就像我说的,当一切都在 locahost 上时,它可以完美运行。但是只要 API 在 Azure App Service 上,两者就会设法建立 SignalR 连接,仅此而已。 WPF 应用未从 API 接收任何数据。
有什么想法吗?
【问题讨论】:
标签: wpf signalr webapi .net-core-3.1