我有一个在公司内部网上运行的Blazor-Server应用程序,用户的浏览器通过我们的标准Web应用程序门户连接到服务器,它几乎不做任何事情,比如提供一个友好的URL,并负责SSO、故障转移……不幸的是,这个门户网站对WebSocket消息传递有一些限制,将有效负载限制在64KB,这 destruct 了SignalR通信,因为当页面包含大量数据(如大网格)时,服务器恰好向浏览器发送少量hundreds kb甚至Mb条消息. 当我直接连接时,它工作得很好,但我失go 了SSO,这在用户体验方面是一个很大的损失.
所以我的问题是:我如何继续使用具有友好的CNAME for HTTP的门户,并告诉Blazor使用WebSocket的真实主机名,例如:
- Http=>;http://myportal/myapp/home
- WebSocket ws://server1234:6400/_blazor
我看到了一些如下所示的允许更改路径的JS代码,但没有找到如何映射baseurl……
<script>
(function start() {
Blazor.start({
configureSignalR: builder => builder.withUrl("/_barfoo")
});
})()
</script>
=[编辑]基于Jason答案的完整解决方案=
浏览器代码
// in _layout.cshtml
<script>
(function start() {
var signalUrl = 'http://server1234:6400/_blazor'
Blazor.start({
configureSignalR: builder => builder.withUrl(signalUrl)
});
})()
</script>
CORS的服务器代码
// in Program.cs
builder.services.AddCors(options =>
{
options.AddPolicy("SigRPolicy", builder =>
builder.WithOrigin("http://server1234")
.AllowAnyMethod()
.AllowAnyHeader())
.SetIsOriginAllowed(_ => true);
// !! After app.UseRoutine (order matters)
app.UseCors("SigRPolicy")
// !! before app.UseAuthentication
});
但是现在我需要通过API调用动态检索host name:port