c# - 为什么发布到 IIS 后我的 Blazor 服务器页面为空?
问题描述
我正在开发一个 Blazor Server 应用程序,该应用程序公开 Windows 任务计划程序任务以通过有限的控件进行远程控制(我知道我可以远程访问服务器的任务计划程序,但这是通过本地网站将其提供给我组织内的其他一些用户的请求)。访问 Windows 任务计划程序的库Microsoft.Win32.TaskScheduler
来自 NuGet。该应用程序非常简单,只有 1 个组件,用户通过 Windows 身份验证进行身份验证,该应用程序托管在应用程序服务器的 IIS 上。我也是 Blazor 的新手,我正在边做边学。
剃刀页面
@page "/"
<h3>Task Manager</h3>
<div>
@if (TaskList == null)
{
<div class="spinner"></div>
}
else
{
@foreach (var task in TaskList)
{
<p>
@task.Name -
@task.State -
@task.Enabled
</p>
<p>
@task.LastRunTime -
@task.NextRunTime -
@task.LastTaskResult
</p>
<p>
<input id="btnPause" type="button" disabled="@(task.Enabled ? false : true)" value="Pause" @onclick="() => DisableTask(task)" />
<input id="btnResume" type="button" disabled="@(task.Enabled ? true : false)" value="Resume" @onclick="() => EnableTask(task)" />
<input id="btnRun" type="button" disabled="@(task.Enabled ? false : true)" value="Run now" @onclick="() => RunTask(task)" />
<input id="btnStop" type="button" disabled="@(task.Enabled ? false : true)" value="Stop" @onclick="() => EndTask(task)" />
</p>
<br />
}
}
</div>
背后的代码
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Win32.TaskScheduler;
using Microsoft.AspNetCore.Components;
namespace TaskSchedulerManager.Pages
{
public partial class TaskManager: ComponentBase
{
public IEnumerable<Task> TaskList { get; set; }
protected override System.Threading.Tasks.Task OnInitializedAsync()
{
LoadScheduleTask();
return base.OnInitializedAsync();
}
private void LoadScheduleTask()
{
using (TaskService ts = new TaskService())
{
TaskFolder root = ts.RootFolder;
TaskFolder sub = root.SubFolders["Task Scheduler Folder Name"];
List<Task> tsList = new List<Task>();
foreach (Task task in sub.Tasks)
{
tsList.Add(task);
}
TaskList = new List<Task>(tsList);
}
}
private void DisableTask(Task task)
{
task.Enabled = false;
InvokeAsync(() =>
{
StateHasChanged();
});
}
private void EnableTask(Task task)
{
task.Enabled = true;
InvokeAsync(() =>
{
StateHasChanged();
});
}
private void RunTask(Task task)
{
task.Run();
InvokeAsync(() =>
{
StateHasChanged();
});
}
private void EndTask(Task task)
{
task.Stop();
InvokeAsync(() =>
{
StateHasChanged();
});
}
}
}
当我在本地运行它时,所有任务都按预期显示在页面上。当我将应用程序发布到 IIS 时,该页面仅显示标题Task Manager,其下方为空,位于同一台计算机或本地计算机上。我错过了什么?
解决方案
网页只是一个空页面,因为呈现的顺序不正确。
protected override System.Threading.Tasks.Task OnInitializedAsync()
{
LoadScheduleTask();
return base.OnInitializedAsync();
}
改成
return base.OnInitializedAsync();
LoadScheduleTask();
// terminal task...
或者别的什么,永远记住 HTML 渲染的顺序。Blazor 的本质是通过 WebAssembly 代码呈现 HTML。
推荐阅读
- python - 是否有可用于将动画 GIF 文件插入 Excel 的 Python 模块
- git - 合并修补程序分支以开发重新引入旧更改
- reactjs - 电子和反应:找不到具有给定 URL 的资源,DevTools 无法加载 SourceMap
- r - plotly hoverlabel 颜色透明度
- python - 元组和 For 循环的 Python 标识符问题
- docker - .net core 3.1 中的数据保护在 Docker 中采用默认设置
- stripe-payments - 条纹 - 找出客户使用的付款方式
- python - Python在线程上显示相机预览
- kubernetes - Openshift 作业存在,但未安排且无法删除
- node.js - GraphQL:几个字段解析器