首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.NET核心3预览:不允许同步操作

.NET核心3预览:不允许同步操作
EN

Stack Overflow用户
提问于 2019-03-07 20:29:59
回答 4查看 15.3K关注 0票数 20

我有一个Angular.js应用程序,我正在移植到.NET核心。

它在以前版本的.NET核心3预览版中运行良好。

但是,升级到最新3.3之后,一些get请求将返回此错误:

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

我不明白为什么这种情况只发生在一些请求中,而不存在于其他请求中。

我相信默认情况下,Angular.js会执行异步:xhr.open(方法、url、true);

有人能解释一下这件事吗?

EN

回答 4

Stack Overflow用户

发布于 2019-03-08 11:31:18

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

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

// Startup.ConfigureServices

代码语言:javascript
运行
复制
services.Configure<IISServerOptions>(options =>
{
  options.AllowSynchronousIO = true;
});
票数 23
EN

Stack Overflow用户

发布于 2019-05-06 19:56:32

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

代码语言:javascript
运行
复制
   public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .ConfigureKestrel((context, options) =>
                {
                    options.AllowSynchronousIO = true;
                })
票数 17
EN

Stack Overflow用户

发布于 2020-03-13 20:55:20

对于特殊的方法,可以禁用它。

代码语言:javascript
运行
复制
var syncIOFeature = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (syncIOFeature != null)
 {
  syncIOFeature.AllowSynchronousIO = true;
 }

或禁用所有应用程序范围。

代码语言:javascript
运行
复制
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureKestrel((context, options) =>
            {
                options.AllowSynchronousIO = true;
            })

或在服务配置启动中。

代码语言:javascript
运行
复制
services.Configure<IISServerOptions>(options =>
{
  options.AllowSynchronousIO = true;
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55052319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档