我正在体验与. NET Blazor服务器的绑定,并试图列出系统上可用的所有显示器。
从一个新项目开始,尽可能简单,我有一个模型:
using CommunityToolkit.Mvvm.ComponentModel;
namespace BindingTest.Data;
public class DisplayInfo : ObservableObject
{
private string deviceName = string.Empty;
public string DeviceName
{
get { return deviceName; }
set { deviceName = value; OnPropertyChanged(nameof(DeviceName)); }
}
private bool primary;
public bool Primary
{
get { return primary; }
set { primary = value; OnPropertyChanged(nameof(Primary)); }
}
}
a类:
using System.Collections.ObjectModel;
using WindowsDisplayAPI;
namespace BindingTest.Data;
public class DisplayService
{
public ObservableCollection<DisplayInfo> ScreenCollection { get; set; } = new();
public DisplayService()
{
foreach (Display display in Display.GetDisplays())
{
ScreenCollection.Add(new DisplayInfo
{
DeviceName = display.DisplayName,
Primary = display.IsGDIPrimary,
});
}
}
}
a页:
@page "/displays"
@using BindingTest.Data;
@using System.Collections.ObjectModel;
<PageTitle>Displays</PageTitle>
@inject DisplayService display
<h1>Display Service</h1>
@if (display.ScreenCollection == null)
{
<p><em>Loading...</em></p>
}
else
{
<p>Total items in collection: @display.ScreenCollection.Count</p>
<table class="table">
<thead>
<tr>
<th>Device Name</th>
<th>Primary</th>
</tr>
</thead>
<tbody>
@foreach (var display in display.ScreenCollection)
{
<tr>
<td>@display.DeviceName</td>
<td>@display.Primary.ToString()</td>
</tr>
}
</tbody>
</table>
}
一个程序. cs:
using BindingTest.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<DisplayService>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");
app.Run();
Websocket协议已启用,站点已发布。如果满足以下任一条件,此操作将运行良好:
1-我使用iis express从visual studio内部运行
2-在publish文件夹中启动. exe文件,然后导航到提供的地址
但是,如果我使用IIS运行,则该方法不起作用,并且集合为空
GitHub回购协议:here
进程/代码有什么不对的地方吗?IIS的限制?为长时间的帖子道歉,不知道我做错了什么。也许有人也可以建议一个好的教程?
1条答案
按热度按时间bqucvtff1#
简而言之,这是预期行为,无法在代码中实现。
"为什么"
1.我知道它的作品在IISExpress和点击.exe文件,当在开发模式下,它也属于客户端模型。
1.即使是在iis生产环境下也可以工作,但是这段代码没有意义。因为编译文件在服务器端,它会显示服务器端的屏幕,对吗?