.Net Core 3预览:不允许同步操作

时间:2019-03-07 20:30:00

标签: .net core preview synchronous

我有一个要移植到.Net Core的AngularJs应用。

在早期版本的.Net Core 3预览版中,它运行正常。 3.2。

但是,在升级到最新的3.3版本之后,某些get请求正在返回此错误:

InvalidOperationException:不允许进行同步操作。调用WriteAsync或将AllowSynchronousIO设置为true。

我看不出为什么只有某些请求而不是其他请求会发生这种情况。

我相信默认情况下AngularJs会异步:xhr.open(method,url,true);

有人能对此有所启发吗?

4 个答案:

答案 0 :(得分:4)

此问题在这里描述:https://github.com/aspnet/AspNetCore/issues/8302

目前的解决方法是在startup.cs中手动将AllowSynchronous设置为true;

// Startup.ConfigureServices

services.Configure<IISServerOptions>(options =>
{
  options.AllowSynchronousIO = true;
});

感谢克里斯·罗斯的帮助

答案 1 :(得分:1)

值得注意的是,如果您直接在kestrel上托管,则您的Program.cs应该具有适当的ConfigureKestrel调用

   public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureKestrel((context, options) =>
                {
                    options.AllowSynchronousIO = true;
                })

答案 2 :(得分:1)

您可以通过特殊方法将其禁用

var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
        if (syncIOFeature != null)
        {
            syncIOFeature.AllowSynchronousIO = true;
        }

答案 3 :(得分:0)

如果像我一样使用CustomWebApplicationFactory,则可以在其构造函数中设置该标志,这将使我的测试直接从VS2019开始。

public class CustomWebApplicationFactory<TStartup> : WebApplicationFactory<TStartup> where TStartup: class
{
    public CustomWebApplicationFactory()
    {
        Server.AllowSynchronousIO = true;
    }