异构系统间Web Service通讯框架小结(补完企划)

本文不讨论WS性能问题,也不讨论使用非框架方式比如TCP伪造HTTP协议等方式通讯,仅讨论在常见的系统间使用HTTP+SOAP通讯框架的方法以及雷区。

本文大多数内容来自于某次在两个月内迁移完两个异构ESB产品后的思考。

  • Java

Java下框架比较多,常见问题是一种获取(HTTP GET) WSDL文件然后框架动态编译,再POST服务。在不计较性能的情况下没有什么问题。如果获取到的WSDL中服务URL不可访问,则框架就会产生错误。如果不能修改源码改为直接POST方式,一种解决方案是将手工下载的WSDL和XSD文件(若有)放到一个目录,并且在properties文件中指定wsdlURL为file://协议并指向WSDL文件位置。

  1. Apache AXIS 1.4

org.apache.axis.component.encoding.UTF8Encoder::writeEncoded方法针对大于0x7f的char都加码,如果一些C写的后端服务不能正确解析NC编码,收到内容为例如#xxxx;形式的时候,可以考虑将上述方法修改。

  1. Apache AXIS 2
  2. Apache CXF
  3. JAXB
  • C/C++ Linux
  1. 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
  1. gSOAP
  2. 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又恨又爱。

  1. WCF 使用配置实现日志行为:https://msdn.microsoft.com/en-us/library/ms730064(v=vs.110).aspx
  2. Web Reference 扩展IEndpointBehavior,IClientMessageInspector实现日志行为。

 

posted @ 2016-06-14 10:59  charset  阅读(409)  评论(0编辑  收藏  举报