【问题标题】:SignalR HubConnection Invalid URISignalR HubConnection URI 无效
【发布时间】:2013-12-03 19:37:03
【问题描述】:

根据我找到的示例http://weblog.west-wind.com/posts/2013/Sep/04/SelfHosting-SignalR-in-a-Windows-Service,我正在 Windows 服务中实现 SignalR 主机服务器。

一切正常,但如果我尝试:

SignalR = WebApp.Start<SignalRStartup>("http://*:8080/");

我得到一个类型为 `

的未处理异常
'System.UriFormatException'` occurred in System.dll

Additional information: Invalid URI: The hostname could not be parsed.

如果我使用它会很好用

SignalR = WebApp.Start<SignalRStartup>("http://localhost:8080/");

可能是一个愚蠢的假设,但根据我从中获取的文章,我假设 *:8080 语法可以工作。我的问题是,我是否遗漏了什么或者文章不正确并且这种格式不起作用?

【问题讨论】:

  • 看来应该可以了,见HttpListener;它是否也拒绝“http://+:8080/”?这可能是其他地方造成的吗?您使用的自托管库是什么版本的?
  • 是的,* 和 + 都被拒绝。就像完全省略主机名一样。问题是,如果您尝试从远程机器访问 Owin 托管服务,或者甚至在同一个机器上但通过机器名称或 IP 地址访问,它不会连接并且您会得到一个 HTTP 400 The request hostname is invalid.

标签: c# signalr owin


【解决方案1】:

所以,+ 确实有效......(是的,我觉得很愚蠢)在我的测试期间,我认为只有我记得以管理员身份运行的时间的 1/2,这导致了糟糕的测试结果,因为它因为以下原因而失败试图打开端口,而不是因为地址。

我通过阅读@DigitalD 链接的 Owin/Katana 源代码了解到这一点。事实证明,它不仅支持 + 语法,而且代码中有一条注释说它假设它......

http://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Host.HttpListener/OwinHttpListener.cs

// Assume http(s)://+:9090/BasePath/, including the first path slash. May be empty. Must end with a slash.

【讨论】:

  • 如果您不想以管理员身份运行,可以这样做:netsh http add urlacl url=http://+:8081/ user=DOMAIN\user(用您的数据替换相关部分),请参阅docs
【解决方案2】:

您是否尝试过从 URI 中删除端口号?

试试

http://localhost 而不是http://localhost:8080

【讨论】:

  • 感谢您的帖子,但我已经发布了原因和解决方案,作为我自己问题的答案。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 2018-12-09
  • 2017-04-14
  • 1970-01-01
  • 2021-12-06
  • 2017-11-18
  • 2020-04-27
  • 1970-01-01
相关资源
最近更新 更多