2014-08-29 97 views
3

我正在研究我正面臨的類似於here問題的問題之一。該問題基本上解決了客戶端應用程序無法連接到數據庫的問題。該解決方案似乎表明安裝的應用程序與網絡協議不兼容,我們應該卸載該應用程序。.NET 4.5和帶有OVERLAPPED(非IFS Winsock BSP或LSP)的異步Winsock

基於我的測試卸載.NET 4.5和加載​​的.NET 4.0也有竅門,我想找出原因。在研究更進我發現以下幾點:

.NET 4.5有一個變化,使SQLCLIENT支持異步按本Microsoft article

由於這種變化,即使用異步的Winsock與.NET OVERLAPPED結構的任何應用程序4.5將導致應用程序沒有體驗到這些Winsock調用的完成。

我對此的反應是不是這被認爲是一個.NET 4.5錯誤?

回答

3

你可能稱之爲Windows缺陷,但絕對不是.NET或SQL Server的錯誤。

Winsock有兩種類型的過濾器驅動程序:IFS和非IFS。 IFS驅動程序重新使用Winsock功能,而非IFS則完全覆蓋它。

在Windows Vista之前,異步調用都會得到一個表示立即成功的返回值會得到一個完成通知。 Vista增加了一個perf-enhancing模式來刪除這個冗餘通知。 IFS司機免費得到這個,而非IFS司機現在需要更新以支持它。

因此,您可以將其稱爲Windows缺陷,方法是不保留向棄用API的向後兼容性。它可能根本無法實現,他們的新WFP體系結構將取而代之。我想說它更接近驅動程序錯誤 - 你不能說你與Vista兼容,然後忘記實現其中的一個API。

無論哪種方式,這是一個有效的Windows功能和.NET/SQL是正確的充分利用它的增加性能。每KB2568167,您可以運行此命令,以確定到底是什麼驅動程序導致了問題:

netsh WinSock Show Catalog 

如果服務標誌值有地址0x20000位集,提供者使用 IFS句柄,並會正常工作。如果0x20000位清除(不是 集),則它是非IFS BSP或LSP。

+0

我完全理解並接受你的回答,但我在這裏扮演魔鬼的擁護者。我遇到了這個鏈接https://connect.microsoft.com/VisualStudio/feedback/details/729323/visual-studio-11-beta-installation-disabled-my-abillity-to-connect-remote-ms-sql-server - 但不是本地數據庫#標籤微軟團隊負責人也承認他們有一個錯誤,我猜這是他們自己的應用程序違反規則的情況下? – Fylix 2014-08-29 19:29:41

+0

我沒有看到他們在哪裏承認他們有一個錯誤。他們將提醒有過錯的供應商。 – usr 2014-08-29 22:31:19

1

不,這不是.NET中的錯誤。 .NET Framework可以假定底層網絡基礎結構正常工作。如果安裝了一個損壞的WinSock提供程序,那麼.NET通常無法訪問數據庫。

.NET框架既不負責解決第三方安裝軟件中的錯誤,也不可能在一般情況下提供此類行爲。