错误-32 EPIPE损坏的管道

时间:2017-08-02 10:17:14

标签: asp.net-core

我正在使用ajax发布一个post请求,该请求应返回一个partialview,但我总是在日志中遇到以下错误:

3

查看调试日志时,我发现它正在加载部分视图数据,但是我收到错误。

我在网上找不到关于-32 EPIPE错误的任何内容,有人可以帮我解释这个错误的含义吗?

调用Ajax

Connection id "0HL6PHMI6GKUP" communication error.
Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException: Error -32 EPIPE broken pipe

控制器

$( "#PostForm" ).submit(function( event ) {

    //Ajax call
    $.ajax({
        type: 'POST',
        url: "/url/path/CreateBox", 
        data: {
            "id": $("#RackId").val(),
            "Name": $("#Name").val()
        },
        success: function(result){
            $("#modal").html(result);
        }
    });
});

版本

[HttpPost]
public async Task<IActionResult> CreateBox(int id, string Name)
{
    //Get the info of the given ID
    Rack rack = await this._rackAccess.GetByIdAsync(id);
    if (rack == null)
    {
        return NotFound();
    }

    Box box = new Box();
    box.Rack = rack;

    if (!string.IsNullOrEmpty(Name))
    {
        box.Name = Name;

        var result = await this._boxAccess.InsertAsync(box);

        //Returns a list of boxes
        return PartialView("Boxes", await this._boxAccess.ToRackListAsync(rack.ID));
    }else{
        //Returns form again
        return PartialView("CreateBox", box);
    }
}

2 个答案:

答案 0 :(得分:0)

可能由于服务器端长时间处理, 通讯管道被加班机制打破了。

希望这有用。

答案 1 :(得分:0)

解决方案可以在github上找到我发布的问题以及: https://github.com/aspnet/KestrelHttpServer/issues/1978

在github上回答halter73:

&#34;通讯错误&#34;通常有ECONNRESET,EPIPE和ECANCELED品种。你通常选择哪一个取决于你正在运行的平台,但这三个平台通常意味着同样的事情:客户端不合理地关闭了连接。

我有理论为什么会这样。我认为页面可能会在xhr中重新加载导致xhr中止。这可以通过从jQuery提交回调中返回false来修复。

我接受了所有依赖项和你的jQuery片段,并演示了这个页面重新加载如何导致Linux上的EPIPE和Windows上的ECANCELED在https://github.com/halter73/EPIPE的示例repro中。它使用csproj而不是project.json,因为我没有一个支持project.json的旧CLI。