我将 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)