Nor*_*son 8 .net core synchronous preview
我有一个要移植到.Net Core的AngularJs应用程序。
在以前的.Net Core 3预览版中,它运行正常。3.2。
但是,升级到最新版本3.3后,某些get请求将返回此错误:
InvalidOperationException:不允许进行同步操作。调用WriteAsync或将AllowSynchronousIO设置为true。
我看不到为什么只有某些请求而不是其他请求会发生这种情况。
我相信默认情况下AngularJs会异步:xhr.open(method,url,true);
谁能对此有所启发?
Nor*_*son 10
此问题在这里描述:https : //github.com/aspnet/AspNetCore/issues/8302
现在的解决方法是在startup.cs中手动将AllowSynchronous设置为true;
// Startup.ConfigureServices
services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
Run Code Online (Sandbox Code Playgroud)
感谢克里斯·罗斯的帮助
值得注意的是,如果直接在kestrel上托管,则Program.cs应该具有适当的ConfigureKestrel调用
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
options.AllowSynchronousIO = true;
})
Run Code Online (Sandbox Code Playgroud)
您可以通过特殊方法禁用它
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
{
syncIOFeature.AllowSynchronousIO = true;
}
Run Code Online (Sandbox Code Playgroud)
或在所有应用范围内禁用
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureKestrel((context, options) =>
{
options.AllowSynchronousIO = true;
})
Run Code Online (Sandbox Code Playgroud)
或在服务中配置启动
services.Configure<IISServerOptions>(options =>
{
options.AllowSynchronousIO = true;
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2117 次 |
| 最近记录: |