【问题标题】:Windows 7 Websocket PlatformNotSupportedExceptionWindows 7 Websocket PlatformNotSupportedException
【发布时间】:2018-06-09 06:06:39
【问题描述】:

我正在使用 Microsoft.Azure.Devices.Client NuGet 包开发应用程序。在 Windows 10 上一切运行良好,但在 Win7 机器上进行测试时,我得到了这个聚合异常。

System.PlatformNotSupportedException:WebSocket 协议不支持 在这个平台上支持。

四处搜索,我发现几个线程说这在 Windows 7 上不受支持,并且有一些“微软正在开发它”类型的 cmets。

https://github.com/5andr0/PogoLocationFeeder/issues/229

自 2016 年以来,我没有太多更新或解决方案。

多一点搜索引导我了解 Microsoft Web 平台安装程序 https://www.microsoft.com/web/downloads/platform.aspx

我们尝试安装“IIS 10.0 Express”和“Microsoft Azure PowerShell”,但仍然没有成功。

我们正在将我在 W10 机器上的所有 Web 平台也安装到 W7 上……其中大部分似乎都支持一对一。

谁能评论这是否已在 W7 完成或计划进行?

或者在我尝试让不可能的事情发挥作用之前,我真的需要换个方向吗?

除了 Web 服务安装之外,我的 W7 安装程序中可能缺少一个包吗?

在此先感谢您的任何意见!!!

【问题讨论】:

    标签: .net azure iis websocket windows-7


    【解决方案1】:

    您在“再搜索一点”之后所做的一切都走错了路。请停止这样做。

    简短的回答是,您正在尝试使不可能的事情发挥作用,因为 Microsoft 本身不愿意在 Windows Vista 和 7 上支持 WebSockets(很久以前就不再支持主流了)。尝试使用其他替代方式,不要再浪费时间了。

    长答案是,

    • Microsoft 当前的假设始终是 WebSockets 需要 Windows 8 及更高版本。那是因为限制在于http.sys 和 HTTP API,这是一个操作系统组件。
    • Microsoft 确实拥有在 Windows Vista 和 7 上支持 WebSockets 的技术,无需更改操作系统级别即可通过重用其对 macOS 和 Linux 的 WebSockets 支持的托管实现。他们还没有完成所有的工作,https://github.com/dotnet/corefx/issues/9503

    正如 GitHub 问题状态 (up-for-grabs) 所显示的,如果您愿意,可以继续工作并帮助自己。我不会说这是不可能的,但与转向可行的替代方案相比,它并不简单。

    当然,如果你有野心并且有能力做艰难的事情,你绝对应该站出来解决它,不仅是为了你自己,也是为了所有像你一样的开发者。

    祝你好运。

    [2018 年 3 月 27 日更新]

    https://github.com/dotnet/corefx/pull/26429

    微软终于在所有地方启用了托管实现(UWP 除外)。因此,如果您的应用程序面向 .NET Core 2.1 及更高版本,它应该能够在 Windows Vista/7 上运行 WebSockets。关于 .NET Framework 应用程序的故事还不得而知。

    【讨论】:

    • 感谢 Lex,我查看了 github 线程,看起来它们很接近,但我正在寻找更多 Microsoft 开箱即用的解决方案,因为这是针对需要支持的企业软件较旧的操作系统。尽管我很想在这个问题上加入争论,但我无法证明该项目的方向是正确的。这确实帮助我很好地了解了我们正在设计的技术,并决定改变我们的理念。最终,我认为这个问题帮助我们找到了“更好的?”解决方案。
    【解决方案2】:

    我遇到了同样的问题并使用以下 nuget 包解决了它:

    System.Net.WebSockets.Client.Managed

    https://www.nuget.org/packages/System.Net.WebSockets.Client.Managed/

    github来源:https://github.com/PingmanTools/System.Net.WebSockets.Client.Managed

    创建一个适用于该平台的 ClientWebSocket。如果支持则使用 System.Net.WebSockets.ClientWebSocket,否则使用 System.Net.WebSockets.Managed.ClientWebSocket。

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2012-09-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      相关资源
      最近更新 更多