WSDL可以传输FILE类型吗?

时间:2012-05-07 09:26:32

标签: web-services soap wsdl

在节点机器上部署的“checkResult”服务被定义为将节点上的结果返回给发送请求的集群控制器。节点上的结果(以文件形式)可能在长度上有很大差异,就像每日日志文件一样。

起初,我认为只使用一个字符串来打包文件的整个内容就可以了,所以我定义了

checkResult(inType *in,OutType *out)

其中OutType *是char *。然后我意识到字符串可能是KB长度甚至更多。所以我想知道在这里使用字符串是否合适。

我google了很多,找不到wsdl中允许的最大长度(也可能与本地maxbuffer长度冲突),也没有找到有关传输文件类型参数的任何信息。

可能会建议使用struct类型,但它可能是如此嵌套的文件,并且当内部的某些元素可能为零且不存在时难以解析。

当您需要在网络服务中返回文件类型结果或大量数据时,您会怎么做?

p.s服务器和客户端都在C。

1 个答案:

答案 0 :(得分:1)

在(SOAP)Web服务请求或响应中传输大量数据时,通常最好使用附件机制,而不是将数据作为正文的一部分。可能是考虑附加机制的顺序(最广泛到最窄的采用):

  • 消息传输优化机制(MTOM) - 许多主流语言支持的最新规范(http://www.w3.org/TR/soap12-mtom/) 。
  • 带附件的SOAP - 此规范(http://www.w3.org/TR/SOAP-attachments)已存在多年,并且支持多种语言,但特别是Microsoft不支持
  • 直接互联网邮件封装(DIME) - 此规范(http://bgp.potaroo.net/ietf/all-ids/draft-nielsen-dime-02.txt)被推送Microsoft和支持已经提供多种语言/框架,包括java和.NET。

理想情况下,您可以使用框架直接从WSDL指示基于MTOM的Web服务生成代码存根。

此类WSDL文档的关键部分包括:

  1. MTOM政策声明
  2. 绑定中的政策申请
  3. 占位符,用于引用类型(架构)部分中的附件
  4. 如果您正在以契约优先工作并拥有WSDL,本网站第1.2节(http://www.w3.org/Submission/WS-MTOMPolicy/)中的示例显示了要进行的简单添加声明并应用MTOM政策。同一站点的附录I显示了一个架构元素的示例,该元素允许Web服务客户端或服务器识别对MTOM附件的引用。

    我没有在C中实现过Web服务或客户端,但对最近更新的软件包的简要扫描显示gSoap(http://www.cs.fsu.edu/~engelen/soap.html)可能是帮助你的努力。

    查看这些文档,看看它们是否有助于推进项目。