【问题标题】:Blazor renders components but immediately fails to connectBlazor 呈现组件但立即无法连接
【发布时间】:2020-11-09 04:59:10
【问题描述】:

我已关注 the documentation(和许多博客),将 blazor 组件添加到剃须刀页面应用程序。剃须刀页面完美呈现组件,但随后立即“尝试重新连接”,这总是失败。控制台输出显示(显然是在本地主机上运行):

[2020-07-20T00:22:59.957Z] Information: Normalizing '_blazor' to 'https://localhost:44306/_blazor'.
blazor.server.js:1 [2020-07-20T00:22:59.961Z] Debug: Starting HubConnection.
blazor.server.js:1 [2020-07-20T00:22:59.969Z] Debug: Starting connection with transfer format 'Binary'.
blazor.server.js:1 [2020-07-20T00:22:59.970Z] Debug: Sending negotiation request: https://localhost:44306/_blazor/negotiate?negotiateVersion=1.
blazor.server.js:1 [2020-07-20T00:23:00.145Z] Debug: Selecting transport 'WebSockets'.
blazor.server.js:1 [2020-07-20T00:23:00.174Z] Information: WebSocket connected to wss://localhost:44306/_blazor?id=vuY411dkAsPan4fQrNN3aw.
blazor.server.js:1 [2020-07-20T00:23:00.175Z] Debug: The HttpConnection connected successfully.
blazor.server.js:1 [2020-07-20T00:23:00.175Z] Debug: Sending handshake request.
blazor.server.js:1 [2020-07-20T00:23:00.176Z] Information: Using HubProtocol 'blazorpack'.
blazor.server.js:1 [2020-07-20T00:23:00.182Z] Debug: Server handshake complete.
blazor.server.js:1 [2020-07-20T00:23:00.182Z] Debug: HubConnection connected successfully.
blazor.server.js:1 [2020-07-20T00:23:00.327Z] Information: Close message received from server.
blazor.server.js:1 [2020-07-20T00:23:00.329Z] Debug: HttpConnection.stopConnection(undefined) called while in state Disconnecting.
blazor.server.js:1 [2020-07-20T00:23:00.332Z] Error: Connection disconnected with error 'Error: Server returned an error on close: Connection closed with an error.'.
e.log @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
blazor.server.js:1 [2020-07-20T00:23:00.333Z] Debug: HubConnection.connectionClosed(Error: Server returned an error on close: Connection closed with an error.) called while in state Connected.
blazor.server.js:1 Uncaught (in promise) Error: Server returned an error on close: Connection closed with an error.
    at e.processIncomingData (blazor.server.js:1)
    at e.connection.onreceive (blazor.server.js:1)
    at WebSocket.i.onmessage (blazor.server.js:1)
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:8
a @ blazor.server.js:8
Promise.then (async)
c @ blazor.server.js:8
(anonymous) @ blazor.server.js:8
r @ blazor.server.js:8
E @ blazor.server.js:8
(anonymous) @ Eol:12448
blazor.server.js:19 [2020-07-20T00:23:03.338Z] Error: TypeError: window.Blazor.reconnect is not a function
e.log @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
r @ blazor.server.js:19
e.attemptPeriodicReconnection @ blazor.server.js:19
e @ blazor.server.js:19
e.onConnectionDown @ blazor.server.js:19
(anonymous) @ blazor.server.js:8
(anonymous) @ blazor.server.js:1
e.completeClose @ blazor.server.js:1
e.connectionClosed @ blazor.server.js:1
connection.onclose @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
blazor.server.js:19 [2020-07-20T00:23:06.346Z] Error: TypeError: window.Blazor.reconnect is not a function
e.log @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
r @ blazor.server.js:19
e.attemptPeriodicReconnection @ blazor.server.js:19
e @ blazor.server.js:19
e.onConnectionDown @ blazor.server.js:19
(anonymous) @ blazor.server.js:8
(anonymous) @ blazor.server.js:1
e.completeClose @ blazor.server.js:1
e.connectionClosed @ blazor.server.js:1
connection.onclose @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
blazor.server.js:19 [2020-07-20T00:23:09.353Z] Error: TypeError: window.Blazor.reconnect is not a function
e.log @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
r @ blazor.server.js:19
e.attemptPeriodicReconnection @ blazor.server.js:19
e @ blazor.server.js:19
e.onConnectionDown @ blazor.server.js:19
(anonymous) @ blazor.server.js:8
(anonymous) @ blazor.server.js:1
e.completeClose @ blazor.server.js:1
e.connectionClosed @ blazor.server.js:1
connection.onclose @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
blazor.server.js:19 [2020-07-20T00:23:12.375Z] Error: TypeError: window.Blazor.reconnect is not a function
e.log @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
r @ blazor.server.js:19
e.attemptPeriodicReconnection @ blazor.server.js:19
e @ blazor.server.js:19
e.onConnectionDown @ blazor.server.js:19
(anonymous) @ blazor.server.js:8
(anonymous) @ blazor.server.js:1
e.completeClose @ blazor.server.js:1
e.connectionClosed @ blazor.server.js:1
connection.onclose @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
blazor.server.js:19 [2020-07-20T00:23:15.390Z] Error: TypeError: window.Blazor.reconnect is not a function
e.log @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
a @ blazor.server.js:19
Promise.then (async)
c @ blazor.server.js:19
(anonymous) @ blazor.server.js:19
r @ blazor.server.js:19
e.attemptPeriodicReconnection @ blazor.server.js:19
e @ blazor.server.js:19
e.onConnectionDown @ blazor.server.js:19
(anonymous) @ blazor.server.js:8
(anonymous) @ blazor.server.js:1
e.completeClose @ blazor.server.js:1
e.connectionClosed @ blazor.server.js:1
connection.onclose @ blazor.server.js:1
e.stopConnection @ blazor.server.js:1
transport.onclose @ blazor.server.js:1
e.close @ blazor.server.js:1
e.stop @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
a @ blazor.server.js:1
Promise.then (async)
c @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stopInternal @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
(anonymous) @ blazor.server.js:1
M @ blazor.server.js:1
e.stop @ blazor.server.js:1
e.processIncomingData @ blazor.server.js:1
connection.onreceive @ blazor.server.js:1
i.onmessage @ blazor.server.js:1
  • _Layout.cshtml 在头部包含<base href="/">,在<body> 末尾包含:

    <script src="_framework/blazor.server.js" autostart="false"></script>
    <script>
        Blazor.start({
            configureSignalR: function (builder) {
                builder.configureLogging(1); // LogLevel.Information
            }
        });
    </script>
    
  • 我有 _Imports.razor 在根目录和在 Pages 文件夹中,包含

    @using Microsoft.AspNetCore.Authorization
    @using Microsoft.AspNetCore.Components
    @using Microsoft.AspNetCore.Components.Authorization
    @using Microsoft.AspNetCore.Components.Forms
    @using Microsoft.AspNetCore.Components.Routing
    @using Microsoft.AspNetCore.Components.Web
    @using Microsoft.JSInterop
    @using MyAppNamespace
    
  • Startup.cs 在ConfigureServices 中有services.AddServerSideBlazor();,Configure 说:

    .MapRazorPages();
    .MapBlazorHub();
    .MapFallbackToPage("/_Host");
    
  • _Host.cshtml 位于 Pages 文件夹中,包含

    @page "/blazor"
    @{
        Layout = "_Layout";
    }
    
    <app>
        <component type="typeof(App)" render-mode="ServerPrerendered" />
    </app>
    

根据控制台日志,从索引页面连接工作正常,但不适用于使用组件的另一个页面。

我显然缺少一些管道,但我不知道它是什么。我错过了什么?


更新:我尝试在索引页面中使用 blazor 组件,似乎客户端连接正常,但我看到同样的事情:页面呈现组件,然后连接关闭,并且没有尝试重新连接成功。

【问题讨论】:

  • 我有这个问题。 aspnet 核心 3.1
  • 你有什么运气吗?

标签: blazor


【解决方案1】:

你说:_Layout.cshtml 包含&lt;href="/"&gt;

如果这不是拼写错误,请将其更改为 &lt;base href="/"&gt;

【讨论】:

  • 感谢您注意到我帖子中的错字!代码居然有:&lt;base href="/"&gt;
  • 所以,需要明确的是,这不是问题所在。为什么连接被关闭?
【解决方案2】:

在将复杂对象作为参数传递给我的组件时,我观察到了这种行为。

<component type="typeof(MyComponent)" render-mode="ServerPrerendered" param-Data="@myComplexObject" />

似乎组件标签助手只适用于简单类型参数。

对我来说,我可以通过将渲染模式设置为 Static 来解决这个问题,但这对每个人来说都不是一个好的解决方案。

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 2015-03-08
    • 2020-11-04
    • 2020-07-17
    • 1970-01-01
    • 2014-11-04
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    相关资源
    最近更新 更多