服務器端 WCF 開發計劃不明,開發者表示遺憾

微軟在與服務器端WCF相關的問題上仍然沒有什麼進展。在人們看來,服務器端WCF似乎已經是一項過時的技術。微軟的一名員工表示,這需要點耐心,這與之前的聲明並不矛盾。

雖然客戶端WCF從一開始就可用,但多年來微軟一直拒絕將WCF的服務器端移植到.NET Core。除了團隊規模問題之外,從來沒有人解釋爲什麼沒有將它們看成一個整體看待。源代碼可以在Reference Source上找到,而且大多數綁定都是跨平臺的。

注意,有一些安全選項和綁定只針對Windows的(例如命名管道、MSMQ),不過Windows Compatibility Pack已經爲其他庫解決了這些問題。

在Scott Hunter給出如下的描述後,引起了用戶新一輪的抱怨:

在.NET Core 3.0之後,我們將不再從.NET Framework中移植任何功能。如果你是一個Web Forms開發人員,並且希望基於.NET Core構建一個新的應用程序,我們將推薦使用Blazor,它提供了最接近的編程模型。如果你是一個Remoting或WCF Server開發人員,並且希望基於.NET Core構建一個新的應用程序,我們建議使用ASP.NET Core Web API或gRPC,它們提供基於跨平臺和跨編程語言的RPC。如果你是一個Windows Workflow開發人員,可以使用開源的Workflow .NET Core移植版本。

這讓很多.NET開發人員感到不安,他們一直認爲REST不能替代WCF。gRPC也是一樣,從WCF用戶的角度來看,gRPC只不過是一個忽略了WCF提供的其他功能的綁定。簡單地說,它們都沒有發揮抽象通信框架的作用,而這正是WCF的主要意圖。(更不用說因爲一些遺留問題和合約原因需要支持WS-*/SOAP了)。

GitHub用戶dgxhubbard寫道:

Scott的聲明說了一件事:“使用gRPC愉快!”我希望做出這個決定的人也能使用gRPC來編寫代碼,並替換掉一些WCF服務器服務,看看這句話到底意味着什麼。我們將不得不重寫我們的服務來模擬WCF,所以我們對.NET Core 3和更高版本的採用將被擱置一段時間。

Chris Benard表示贊同:

我表示贊同。我不認爲gRPC會是一個很好的替代方案。WCF最大的賣點之一是能夠在服務器端和客戶端之間共享DLL,提供了豐富的服務契約模型和接口。在我看來,gRPC依賴於代理生成。我們的一些服務會保存序列化對象的副本,以便稍後重用它們,我不知道gRPC將如何實現這些。

我真的不想再手動使用NetDataContractSerializer,然後把字節強制放到gRPC管道或其他什麼東西上(.NET Core中有NetDataContractSerializer嗎?我希望或者假設是不存的,但DataContractSerializer存在)。

合約對我來說不是什麼大事,它是具有相同DLL的服務器/客戶端之間的模型共享。

此外,還有需要在單個ServiceHost上提供多個端點的能力。我們可以在一個端點上具有TransportSecurity,在另一個端點上具有MessageSecurity。我們用它來更新端點上的安全性,但gRPC似乎都不支持這些。

更不用說我們的用戶必須一個接一個地打開出向端口,而且我們不能只使用gRPC將同一個端口遷移到集羣。

這一切都意味着.NET Core在很長一段時間內都無法在服務器端使用。感謝上帝,我從未在客戶端使用過WS-Security或其他任何東西,所以我沒有掉進這個坑。但是,我必須重新定義netstandard2.0共享的服務器端DLL,然後嘗試瞭解核心WCF客戶端和WCF服務器之間的工作原理。

這真是一個噩夢,我幾乎失去了整個框架。

gRPC甚至不支持用於本地跨進程遠程的命名管道,而這在WCF中我認爲是理所當然的事情…

微軟的Matt Connew發表了幾條評論,暗示了WCF用戶的未來之路:

Scott的這句話並不是在討論WCF代碼庫,因爲WCF現在與.NET是分開的,它更像是一個外部庫,而不是框架的一部分。雖然目前我還不能對服務器端WCF做任何特別的說明,但是將更多的WCF特性移植到服務器的可能性還是有的,我們確實希望支持更多的場景。

Matt最近重申:

我保證,在Build大會之後,會有大量的意見被聽取,請再耐心一點。大型企業的輪子有時可能又大又重,需要很大的力氣才能轉動它們,而且可能會移動得很慢。Scott Hunter在Build大會上布有一些東西正在開發中,而且確實如此。

然而,微軟的Stephen Bonikowsky似乎提出了反駁觀點:

在WCF服務器端方面,並沒有計劃將其包含在代碼庫中。不過,人們對服務器端非常感興趣,你可以關注#2695中正在進行的討論,特別是@mconnew最近在那裏發表的評論。

這可能意味着這是一個從服務器端WCF單獨代碼庫到整體的重新設計,就像我們在使用Entity Framework替換LINQ-to-SQL時看到的那樣。現在還說不清楚,而且微軟還沒有準備好公佈他們的計劃。

查看英文原文Unclear Plans for Server-Side WCF Continues to Frustrate .NET Developers

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章