異構系統間Web Service通訊框架小結(補完企劃)
本文不討論WS性能問題,也不討論使用非框架方式比如TCP偽造HTTP協議等方式通訊,僅討論在常見的系統間使用HTTP+SOAP通訊框架的方法以及雷區。
本文大多數內容來自于某次在兩個月內遷移完兩個異構ESB產品后的思考。
- Java
Java下框架比較多,常見問題是一種獲取(HTTP GET) WSDL文件然后框架動態編譯,再POST服務。在不計較性能的情況下沒有什么問題。如果獲取到的WSDL中服務URL不可訪問,則框架就會產生錯誤。如果不能修改源碼改為直接POST方式,一種解決方案是將手工下載的WSDL和XSD文件(若有)放到一個目錄,并且在properties文件中指定wsdlURL為file://協議并指向WSDL文件位置。
- Apache AXIS 1.4
org.apache.axis.component.encoding.UTF8Encoder::writeEncoded方法針對大于0x7f的char都加碼,如果一些C寫的后端服務不能正確解析NC編碼,收到內容為例如#xxxx;形式的時候,可以考慮將上述方法修改。
- Apache AXIS 2
- Apache CXF
- JAXB
- C/C++ Linux
- gSOAP
對于C/C++來說,遇到最多的坑是隨機的CoreDump/Segment Fault,一般情況是分配的內存沒有清空導致的。gSOAP的使用要點:使用soap_malloc以后,一定要對獲得的內存清空,使用memset或者bzero。
還有如果不想在編譯的時候加入DEBUG選項打印日志,或者說想自定義保存日志,則可以考慮使用gSOAP的logging插件。
請參考:https://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc19.38
2. Apache AXIS 2
- C/C++ Windows
- gSOAP
- WWS API
使用WWS API對于Windows下的WS框架使用又多了一套備選方案。使用WWS API必須安裝Windows SDK相應版本。在Windows 2003 Server SP2默認安裝完Visual Studio以后雖然可以編寫使用WWS API的代碼并且編譯成功,但是缺乏WebServices.DLL程序無法運行。
請參考:https://msdn.microsoft.com/zh-cn/library/ee617176(v=vs.85).aspx
- .NET Framework
相信大家對.Net Framework又恨又愛。
- WCF 使用配置實現日志行為:https://msdn.microsoft.com/en-us/library/ms730064(v=vs.110).aspx
- Web Reference 擴展IEndpointBehavior,IClientMessageInspector實現日志行為。

浙公網安備 33010602011771號