我有一个 ASP.NET 6.0 Core Web Api,并将 Signalr 发布到 Windows Server 2017 上的 IIS。然后我有一个 React-Native 移动应用程序,它使用 @microsoft/signalr 连接到 SignalR 中心。当移动应用程序通过 Android 模拟器和我的 Android 手机在调试模式下运行时,它可以毫无问题地连接到 Signalr。一切都很完美。现在,当我尝试在发布模式下运行相同的应用程序时,它不起作用并且无法连接。请任何想法/帮助,我们将不胜感激。
Program.cs 主要
builder.Services.AddCors(options =>
{
options.AddDefaultPolicy(builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
//.AllowCredentials()
//.SetIsOriginAllowed((host) => true);
});
}
);
// Add services to the container.
builder.Services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
//options.JsonSerializerOptions.PropertyNamingPolicy = null;
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSignalR();
builder.Logging.ClearProviders();
Serilog.ILogger logger = new AppLogger(builder.Configuration).Logger;
builder.Logging.AddSerilog(logger, true);
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment() || app.Environment.IsProduction())
{
app.UseSwagger();
app.UseSwaggerUI();
}
//app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.UseCors();
app.UseWebSockets();
app.MapControllers();
app.MapHub<FacilityHub>("/facility-hub");
app.Run();
当应用程序在发布模式下运行时,我运行以下命令查看日志。
npx 反应本机 log-android
npx react-native run-android --mode release
在Release模式下,Android对不安全的http请求有限制。我们只需要在配置文件中添加一些配置即可。
AndroidManifest.xml 文件:
确保您已添加使用网络的权限。
<uses-permission android:name="android.permission.INTERNET" />
在应用程序标签中设置以下属性:
<application
...
android:usesCleartextTraffic="true"
...>
...
</application>
如果你想在原生代码中使用已弃用的HttpClient来发送http请求,则需要添加以下标签:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>