在另一個問題的answer中提到將XML作爲字符串參數傳遞給Web服務是不好的做法。這是什麼原因?將XML作爲參數傳遞給Web服務
回答
我已經使用了許多Web服務,它們將簡單的XML值作爲參數或將它們作爲輸出返回,所以我不確定爲什麼有人會認爲這是一種不好的做法,但我可以描述一些缺點。
我可以看到使用任意XML作爲輸入參數的主要缺點是它本身並不提供強類型。如果您正在使用基於SOAP的Web服務以及概述Web服務輸入和輸出變量的WSDL,那麼將基本XML用作變量不會爲用戶提供太多信息。如果您有一個基本的字符串輸入值,您認爲用戶將輸入XML數據,則情況尤其如此。更好的方法是使用XMLElement或XMLNode類型而不是標準字符串,以便在Web服務中至少有一個對有效XML進行類型檢查的基本級別。 SOAP和WSDL的想法雖然是創建強類型參數,以便全部對象可以在應用程序之間來回傳遞。您基本上可以創建一個對象並將其用作輸入或輸出值的基礎,並且SOAP將自動處理爲您創建序列化和反序列化的模式。
問題是使用複雜的數據類型會顯着增加調用Web服務所需的複雜性。 Web services提供從簡單的REST服務到複雜的WS - *協議的各種口味的強類型消息。使用Plain Old XML而沒有模式,如果您正在構建基於WS - *的企業到企業Web服務,那麼肯定不是一個好主意,但是如果您要創建一個簡單的REST服務,那麼POX可能恰好適合您的需求。
這個問題至少部分是由於我的關於字符串參數的評論,這些字符串參數包含XML在Web服務設計中是不好的做法。原因如下:
如果Web服務作者希望他的服務接受XML(帶或不帶架構),那麼他應該將該參數定義爲XML架構類型<xs:any/>
。這允許任意的XML元素。可以通過使用<xs:any namespace="xml namespace" processContents="strict" />
來限制允許的XML。這將限制XML來自特定的名稱空間,並將根據模式驗證XML。這種消息的接收者將能夠將其作爲純XML處理,或者可能是object
或XmlElement
或等效的平臺。
相反,如果將XML作爲字符串傳遞,則接收方必須採取措施將其重新轉換爲XML。這假定實際的XML已經正確編碼到字符串中。
傳遞一個字符串也會讓你失去XML的好處。例如,編碼的XML不容易被基於XML的工具(如XSLT)處理。
它的不好的做法,因爲它打開您的Web服務器到潛在的注入或XSS或URI中毒類型的攻擊。大多數Web服務器從不更新或修補,即使它們被識別爲易受攻擊。
- 1. 將xml文檔(作爲參數?)傳遞給Web服務
- 2. 將參數傳遞給AXIS Web服務
- 3. 將對象作爲參數傳遞給wcf web服務函數
- 4. 將表作爲參數傳遞給Web服務
- 5. 將url作爲參數傳遞給web服務方法
- 6. 將xml傳遞給jax rpc Web服務
- 7. 將XML文檔作爲參數傳遞給C#中的Web服務
- 8. 使用C#將XML文檔作爲參數傳遞給Web服務
- 9. 如何將參數傳遞給asp.net web服務並返回xml?
- 10. 將參數傳遞給Web服務工作代碼
- 11. 將Thrift服務作爲參數傳遞
- 12. C#使用HttpRequestMessage將字節數組作爲Get參數傳遞給Web服務
- 13. 將參數傳遞給python服務
- 14. 將參數傳遞給SOAP服務
- 15. 將參數傳遞給溫泉服務
- 16. 如何將可變數量的參數傳遞給Web服務
- 17. 將複雜類型作爲參數傳遞給ASMX服務
- 18. 無法將收集類作爲參數傳遞給RIA服務
- 19. 作爲服務運行時,將JVM參數傳遞給Tomcat?
- 20. 將System.Exception對象傳遞給WCF服務方法作爲參數
- 21. 將Object作爲參數傳遞給WCF服務
- 22. 將對象作爲參數傳遞給Windows服務
- 23. 的Android ksoap2微軟web服務 - 無法將參數傳遞給web服務
- 24. 通過URL將參數傳遞給REST Web服務
- 25. 如何將參數傳遞給SOAP Web服務
- 26. 將DateTime參數傳遞給ASP.NET Web服務
- 27. 使用HttpWebRequest將參數傳遞給json Web服務
- 28. 無法將日期時間參數傳遞給Web服務,GET
- 29. Angular2將參數傳遞給Web服務HTTP GET
- 30. 如何將參數傳遞給外部Web服務在MVC3