我们有一个托管SignalR的Windows服务。相同的代码在不同的机器上运行,结果不同。
如果我在笔记本电脑上访问此链接,则可以:
https://localhost/signalr/negotiate
响应:
{
"Url":"/signalr",
"ConnectionToken":"AQAAANCMnd8BFdERjHoAwE/...==",
"ConnectionId":"0a09e290-c8af-48d6-b791-f05e3b8930b0",
"KeepAliveTimeout":20.0,
"DisconnectTimeout":30.0,
"ConnectionTimeout":110.0,
"TryWebSockets":false,
"ProtocolVersion":"1.2",
"TransportConnectTimeout":5.0,
"LongPollDelay":0.0
}
如果我在桌面上访问相同的链接,我会得到:
我检查了IE设置,笔记本电脑和桌面之间的TLS设置是相同的。我还检查了许多其他IE设置。
编辑:在好的PC上,在浏览器中获取证书警告。在非工作的PC上不会发生。
以下是运行SignalR的代码:
protected override void OnStart()
{
LogUtility.LogInformation("SignalRHubHostController::OnStart()");
string url = this.Application.Configuration.SignalRHubHostController.HostUrl;
UriBuilder uri = new UriBuilder(url);
string schemeOverride = this.Application.Configuration.SignalRHubHostController.UriSchemeOverride;
if (!String.IsNullOrWhiteSpace(schemeOverride))
uri.Scheme = schemeOverride;
LogUtility.LogInformation(String.Format(CultureInfo.InvariantCulture, "Using [{0}] as the SignalR hub URL.", uri.Uri.ToString()));
this._disposableWebServer = WebApp.Start<Startup>(uri.Uri.ToString());
}
internal class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
答案 0 :(得分:0)
我让这个工作。显然,现有的证书设置使用端口443是一个问题。我不知道为什么这是一个问题,但以下步骤导致事情开始为我工作。
注意:Rick Strahl的博客帮助:Hosting SignalR under SSL/https
注意:我不必须使用MMC将证书从个人文件夹复制到受信任的根文件夹。它已经在受信任的根文件夹中。
netsh http delete sslcert 0.0.0.0:443
注意:我最初尝试添加证书并收到错误,因为已经为端口443指定了证书。这就是为什么删除就在这里。
netsh http add sslcert ipport = 0.0.0.0:443 APPID = {12345678-db90-4b66-8b01-88f7af2e36bf} CERTHASH = hashGoesHere
注意:Rick Strahl的博客说总是使用那个appid。我不知道appid在证书环境中意味着什么。所以,是的,不管......