我有一个要移植到.Net Core的AngularJs应用。
在早期版本的.Net Core 3预览版中,它运行正常。 3.2。
但是,在升级到最新的3.3版本之后,某些get请求正在返回此错误:
InvalidOperationException:不允许进行同步操作。调用WriteAsync或将AllowSynchronousIO设置为true。
我看不出为什么只有某些请求而不是其他请求会发生这种情况。
我相信默认情况下AngularJs会异步:xhr.open(method,url,true);
有人能对此有所启发吗?
答案 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;
}