我正在開發的當前項目正在廣泛使用Web服務,並且是在.net 3.5中製作的。現在,當我們要實施第二階段時,如果我們應該像以前一樣使用WCF或Web服務,我們會感到困惑。此外,還有什麼新的東西可以用到,並且正在提供關於Web服務或WCF的.net 4.0。可以選擇什麼? ASMX Web服務或WCF在.net 3.5中?
回答
我們剛剛完成了一個全新的項目,首次使用WCF而不是ASMX Web Services。我們對結果非常滿意,但是確實知道學習曲線陡峭。即便如此,我們對整體結果感到非常滿意,並且知道這是微軟今後所做工作的基礎,而且這一切都是值得的。
快速好處我們獲得了OVER ASMX:
1)對於內部(在防火牆後面)的服務,以服務我們使用的網內通話:TCP結合,這比SOAP要快得多
2 )我們在同一服務上啓用了net:tcp端點和「web」端點,僅配置文件更新(無代碼更改)
3)我們能夠創建僅支持AJAX的RESTful Web服務更改並使用已內置的DataContractJsonSerializer o否則,我們不得不編寫一個HTTP Handler(ashx)並手動處理大部分Json序列化和url解析。 4)由於我們的網站需要進行性能優化和穩定性擴展,因此我們正在考慮轉換爲使用基於MSMQ的消息傳遞結構,該消息傳遞結構是異步和保證的並且參與事務; WCF提供了一個MSMQ bindng,它在我們的服務中只需要很少或者沒有代碼更改 - 只需引用更新並使用現有服務正確設置MSMQ(以及爲事務邊界添加屬性)即可。
但是警告:真的投資學習這個(買藍色的O-Reily書並通過它)。在開發過程中有些參數名稱更改實際上不會中斷服務引用,但會導致傳遞null參數(內置版本傾斜處理),託管要考慮的模型(Windows服務與IIS)以及實例化模型和FaultExceptions都可以真正理解。我們沒有進入,我們有一些痛苦。但是,我們前進了一步,對我們的學習以及我們沒有與ASMX綁定的靈活性和增長機會感到非常高興!
有跳躍到WCF之前不同點考慮:
- WCF是建築更加堅固,並促進最佳實踐。
- 如果你知道你在做什麼「絲般光滑」,如果不是你在一個 騎。
- 您是否有足夠的時間完成服務轉換?
最後我會說,如果你有時間,金光閃閃和肌肉做升級。這很值得。如果asmx滿足所有需求,則可以堅持使用Web服務。
另外兩個方面:
無論你如何決定這對於服務器端,您可以輕鬆地使用Web服務,只使用WCF服務WCF的客戶端。如果您使用單個客戶端使用多個服務,這是有價值的。
你問了即將到來的主題。如果您考慮雲計算:可以在Windows Azure上託管WCF服務。
ASMX是偉大的,簡單的 - 但它在許多方面很有限:
- 你只能承載您的Web服務在IIS
- 你只能通過HTTP 達到您的Web服務
- 安全是非常有限的
WCF補救措施 - 並提供更多的東西。您可以根據需要將您的WCF服務託管在IIS中,或者在控制檯應用程序或Win NT Service中託管自己的WCF服務。您可以使用HTTP,TCP/IP,MSMQ,對等協議,用於在線通信的命名管道等連接WCF服務。
我會絕對推薦你去用WCF。這比ASMX複雜一點,但它也提供了更多的功能和選擇!
至於資源:有MSDN WCF Developer Center,其中有從初學者的教程,文章和示例代碼的一切。
另外,我建議你看看Pluralsight screen casts on WCF - 這是一個優秀的系列從「Creating your first WCF service」和「Creating your first WCF client」走出一路相當高級的主題。亞倫Skonnard很好地解釋了10-15分鐘屏幕錄像中的所有內容 - 強烈推薦!
無論使用WCF還是ASMX,請確保使用asp:ScriptManager標記將您的服務添加到您的頁面。它將爲您構建JavaScript代理,其優點是您無需構建任何解析,無論底層協議如何。這非常非常好。這個例子是ASMX,但是它和使用WCF一樣乾淨。
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebServices/Admin/HospitalLocationService.asmx" InlineScript="true" />
</Services>
</asp:ScriptManager>
另外,還可以使ASMX通過添加ScriptService和ScriptMethod發送JSON屬性:
<System.Web.Services.WebService(Namespace:="http://www.fujimed.com/")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
<ScriptService()> _
Public Class HospitalLocationService
Inherits System.Web.Services.WebService
<WebMethod()> _
<ScriptMethod()> _
Public Function GetAll() As List(Of HospitalLocationEntity)
Return (New HospitalLocation()).GetAll().Data
End Function
<WebMethod()> _
<ScriptMethod()> _
Public Function GetByID(ByVal ID As Integer) As HospitalLocationEntity
Return (New HospitalLocation()).GetHospitalLocation(ID).Data
End Function
End Class
消費服務,而無需解析(這是使用ScriptManager爲你做):
function editLocation(id) {
vRIS.HospitalLocationService.GetByID(id, getComplete, getError);
}
function getComplete(results, context, methodName) {
document.all['txtLocation'].value = results.Location;
document.all['txtInterfaceID'].value = results.InterfaceID;
document.all['selActive'].value = results.Active ? "true" : "false";
document.all['hdnLocationID'].value = results.ID.toString();
}
function getError(errorInfo, context, methodName) {
Alert(methodName + " : " + errorInfo);
document.all['txtLocation'].value = "";
document.all['txtInterfaceID'].value = "";
document.all['selActive'].value = "false";
document.all['hdnLocationID'].value = "";
}
編輯添加:以上所有基於ASMX,我仍然會去WCF,多功能性和定義數據合同的能力。此外,調查WCF RIA服務;他們的目標是支持AJAX和Silverlight,並且它自動化了WCF的大部分配置。
WCF模型非常靈活,本質上 - 如果你只使用使用它來使用basic-profile和xml以及代理對象來呈現一個基本的http模型 - 它會顯得非常相似。
的差異的簡短列表雖然:
- 新興標準(儘管WSE2和WSE3可供ASMX,它是在WCF都簡單得多)
- MTOM內置的更好的支持(和修復了我記得在MTE的WSE3中發現的一個已知的bug)
- 支持的傳輸/協議等的範圍更廣泛,並且行爲是完全可配置/可擴展的;例如,允許您使用自定義的串行/協議/運輸/等無縫,只是通過改變配置
- 更豐富的配置,無論是在配置和運行
- 檢查員和定製校長分享
- 能力全面支持如果你想要的對象模型
- 你可以託管它在網絡服務器之外;一個控制檯EXE或服務,例如
- 1. Web服務ASMX - WCF
- 2. 保護Web服務:Asmx或WCF
- 3. WCF服務而不是ASMX Web服務?
- 4. 從WCF服務調用asmx Web服務
- 5. asmx .net 2.0 web服務
- 6. .NET 4應用程序可以調用.NET 3.5 WCF服務嗎?
- 7. .NET3.5 Web服務認證:選擇什麼?
- 8. 使用WCF消費ASMX Web服務
- 9. WCF無法連接到ASMX Web服務
- 10. 將ASMX轉換爲WCF Web服務
- 11. .NET Web服務:.asmx?WSDL vs .wsdl
- 12. ASMX Web服務
- 13. 使用basicHttp與ASMX Web服務進行wcf服務有什麼優勢
- 14. 調試asmx web服務
- 15. 用於iOS應用程序的WCF或Web服務(.asmx)?
- 16. asmx到WCF或Web API
- 17. 爲ASMX Web服務
- 18. ASP.NET ASMX Web服務
- 19. 請求實體上.NET ASMX Web服務
- 20. 在.NET上選擇Azure或AWS WCF服務部署
- 21. 爲什麼我無法在.NET asmx Web服務中公開接口?
- 22. 從.NET 3.5 WCF Web服務(REST)返回JSON和XML格式
- 23. WCF,Web服務或休息
- 24. WCF服務或Web API
- 25. Java REST Web服務或.Net Web API
- 26. 如何通過ssis包調用Web服務(.asmx)或wcf服務(.svc)?
- 27. 在.NET中獲取會話ASMX web服務
- 28. 錯誤從ASMX Web服務
- 29. 我可以在我的asp.net 3.5 web應用程序中使用wcf rest服務
- 30. 如何在android xamarin項目中使用.net web服務(.asmx)?
託尼是更新值得努力......我的意思是你看到相當的性能,功能和靈活性增強時,從ASMX切換到WCF? – HotTester 2010-01-23 05:26:50
+1好點託尼 – Perpetualcoder 2010-01-23 05:56:03
有關性能的更多信息,請訪問:http://msdn.microsoft.com/en-us/library/bb310550.aspx – magnus 2010-01-23 15:10:26