我将 Blazor 服务器应用程序发布到 Windows 10 上的本地 IIS。它运行良好,但我无法打开网站的多个窗口/选项卡。如果我尝试,它会永远加载,直到我关闭以前的应用程序窗口。
此行为是否是由于 Windows 10 上的 SignalR 受到限制所致?或者我错过了什么?除此之外,该应用程序按预期编译并运行。
应用程序池采用无托管代码、集成的方式。IIS 10。
更新
这种情况不会发生在 IIS Express 上,只会发生在本地 IIS 上。
应用程序设置.json:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "env": "dev",
  "connStrDev": "my dev conn",
  "connStrTest": "my test conn",
  "BaseUrl": "http://localhost/MyProjectName/"
}
Run Code Online (Sandbox Code Playgroud)
应用程序.Razor:
<Router AppAssembly="@typeof(Program).Assembly">
    <Found Context="routeData">
        <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
    </Found>
    <NotFound>
        <LayoutView Layout="@typeof(MainLayout)">
            <p>Sorry, there's nothing at this address.</p>
        </LayoutView>
    </NotFound>
</Router>
Run Code Online (Sandbox Code Playgroud)
MainLayout.razor:
@inherits LayoutComponentBase
@using Domain.Models.Static 
<head>
</head> …Run Code Online (Sandbox Code Playgroud) 在我的 .Net Core 3 API 中,我设置了这样的用户位置:
userDetails.Location = new Point(userDetails.latitude, userDetails.longitude)
{
   SRID = 4326
};
Run Code Online (Sandbox Code Playgroud)
当我尝试让用户进入给定半径时
double radiusMeters = userSettings.Radius;
var usersWithinRadius = Context.UserDetails.Where(ud => ud.Location.Distance(userDetails.Location) <= radiusMeters).ToList();
Run Code Online (Sandbox Code Playgroud)
例如,当我将半径设置为 75000 米时,当用户位置为 (32.600248, 35.1225) 时,它返回一个超过 90km 距离的点 (31.78562, 35.115335)
我究竟做错了什么?
在我的 API 项目中,我有
public class Team
{
    [Key]
    public long Id { set; get; }
    [Required]
    public TeamSettings TeamSettings { get; set; }
}
public class TeamSettings
{
    [Key]
    [Required]
    [Column("TeamSettingsId")]
    public long Id { set; get; }
    [Required]
    [ForeignKey("TeamId")]
    public long TeamId { get; set; }
    [Required]
    public Team Team { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用
var team = await TeamRepo.GetAsync(t => t.Id == teamId, includes);
Run Code Online (Sandbox Code Playgroud)
我可以在我的 SQL Server Profiler 上看到左联接而不是内联接。
我尝试删除注释并像这样流利:
modelBuilder.Entity<Team>()
                    .HasOne(t => t.TeamSettings)
                    .WithOne(ts => ts.Team) …Run Code Online (Sandbox Code Playgroud) 尝试基于使用 ASP.Net Core 3.1 和 Angular 的在线示例创建聊天。
以下内容在 IIS Express 上运行良好,但不适用于本地 IIS。
错误消息:WebSocketTransport.js:85 WebSocket 连接到“ws://localhost/MyCoreAPI/ChatHub”失败:WebSocket 握手期间出错:意外响应代码:400
启动:
    public void ConfigureServices(IServiceCollection services)
    { 
        services.AddSignalR();
    }
    public void Configure(IApplicationBuilder app, 
                          IWebHostEnvironment env, 
                          ApplicationDbContext context)
    {
        app.UseCors("EnableCORS");
        app.UseMiddleware<ErrorHandlingMiddleware>();
        app.UseMiddleware<TokenServiceMiddleware>();
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseEndpoints(route =>
        {
            route.MapHub<ChatHub>("/ChatHub");
        });
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=auth}/{action}/");
        });
        app.Run(async (c) =>
        {
            await c.Response.WriteAsync("My Core Web API");
        });
    }
Run Code Online (Sandbox Code Playgroud)
聊天中心:
public class ChatHub : Hub
{
    public Task SendMessageToAll(Message message) =>
         Clients.All.SendAsync("receiveMessage", message); …Run Code Online (Sandbox Code Playgroud) 启动了一个新的 Blazor WebAssembly 项目(Windows 10,Visual Studio 2019),尝试从服务器端通过 HttpClient 获取一个简单的列表。
错误:
00755c3a:0xa3a0 Uncaught (in promise) RuntimeError: memory access out of bounds
    at malloc (<anonymous>:wasm-function[359]:0xa3a0)
    at monoeg_malloc (<anonymous>:wasm-function[161]:0x3c71)
    at stack_frag_new (<anonymous>:wasm-function[2019]:0x59758)
    at add_frag (<anonymous>:wasm-function[1430]:0x3ccf2)
    at interp_exec_method (<anonymous>:wasm-function[1120]:0x2f609)
    at interp_runtime_invoke (<anonymous>:wasm-function[5655]:0xf7391)
    at mono_jit_runtime_invoke (<anonymous>:wasm-function[5109]:0xddb3d)
    at do_runtime_invoke (<anonymous>:wasm-function[1410]:0x3ba85)
    at mono_runtime_try_invoke (<anonymous>:wasm-function[418]:0xcfdb)
at mono_runtime_invoke (<anonymous>:wasm-function[1610]:0x44b39)
Run Code Online (Sandbox Code Playgroud)
服务器端(正确返回):
    [HttpGet]
    public async Task<IEnumerable<UserDetailsRM>> Get()
    {
        var users = await UserService.GetUsers();
        return users;
    }
Run Code Online (Sandbox Code Playgroud)
客户端:尽管得到了结果,但不渲染任何东西。
<div class="userListWrapper">
        @if (Users != null)
        {
            <table class="table table-borderless" style="font-size:12px; font-family:arial; height: 
                500px; …Run Code Online (Sandbox Code Playgroud)