gpt4 book ai didi

c# - .NET 4.5 和带有 OVERLAPPED 的异步 Winsock(非 IFS Winsock BSP 或 LSP)

转载 作者:行者123 更新时间:2023-11-30 15:28:33 27 4
gpt4 key购买 nike

我正在研究我面临的问题之一,与提出的问题类似 here .该问题基本上解决了客户端应用程序无法连接到数据库的问题。该解决方案似乎表明安装了与网络协议(protocol)不兼容的应用程序,我们应该卸载该应用程序。

根据我的测试,卸载 .NET 4.5 并加载 .NET 4.0 也可以解决问题,我想找出原因。经过更多研究,我发现以下内容:

.NET 4.5 有一个更改,使 SQLClient 支持异步,根据此 Microsoft article ,

由于此更改,任何在 .NET 4.5 中使用具有 OVERLAPPED 结构的异步 Winsock 的应用程序都将导致应用程序无法完成这些 Winsock 调用。

我对此的 react 是,这不是 .NET 4.5 错误吗?

最佳答案

您可能将其称为 Windows 错误,但绝对不是 .NET 或 SQL Server 错误。

Winsock 有两种类型的筛选器驱动程序:IFS 和非 IFS。 IFS 驱动程序重用 Winsock 功能,而非 IFS 则完全覆盖它。

在 Windows Vista 之前,异步调用会同时获得指示立即成功的返回值获得完成通知。 Vista 添加了性能增强模式以删除此冗余通知。 IFS 驱动程序免费获得此功能,而非 IFS 驱动程序现在需要更新以支持它。

因此,您可以通过不保持对已弃用 API 的向后兼容性来将其称为 Windows 错误。这可能根本不可能,他们新的世界粮食计划署架构被用来取代它。我会说它更接近于驱动程序错误——你不能说你与 Vista 兼容,然后忘记实现其中一个 API。

无论哪种方式,它都是一个有效的 Windows 功能,.NET/SQL 可以充分利用它来提高性能。每KB2568167 ,您可以运行此命令来准确确定导致问题的驱动程序:

netsh WinSock Show Catalog

If the Service Flags value has the 0x20000 bit set, the provider uses IFS handles and will work correctly. If the 0x20000 bit is clear (not set), it is a non-IFS BSP or LSP.

关于c# - .NET 4.5 和带有 OVERLAPPED 的异步 Winsock(非 IFS Winsock BSP 或 LSP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25570417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com