0

部署在节点机器上的“checkResult”服务被定义为将节点上的结果返回给发送请求的集群控制器。节点上的结果,以文件的形式,在长度上可能会有很大的不同,这通常是每日日志文件的情况。

起初,我认为只使用一个字符串来打包文件的全部内容可能没问题,所以我定义了

checkResult(inType *in,OutType *out)

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

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

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

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

ps 服务器和客户端都在 C 中。

4

1 回答 1

1

在 (SOAP) Web 服务请求或响应中传输大量数据时,使用附件机制通常比将数据包含在正文中更好。可能考虑附件机制的顺序(从最广泛到最窄的采用):

  • 消息传输优化机制 (MTOM) - 许多主流语言都支持这些规范中的最新规范 (http://www.w3.org/TR/soap12-mtom/)。
  • 带有附件的 SOAP - 这个规范 (http://www.w3.org/TR/SOAP-attachments) 已经存在很多年了,并且支持多种语言,但微软尤其不支持。
  • 直接 Internet 消息封装 (DIME) - 此规范 (http://bgp.potaroo.net/ietf/all-ids/draft-nielsen-dime-02.txt) 由 Microsoft 推送,并已提供多种语言的支持/框架,包括 java 和 .NET。

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

这种 WSDL 文档的关键部分包括:

  1. MTOM 政策声明
  2. 绑定中的策略应用
  3. 类型(模式)部分中对附件的引用的占位符

如果您使用合同优先并且手头有 WSDL,那么本网站 (http://www.w3.org/Submission/WS-MTOMPolicy/) 的第 1.2 节中的示例显示了要声明和应用 MTOM 策略。同一站点的附录 I 显示了模式元素的示例,它允许 Web 服务客户端或服务器识别对 MTOM 附件的引用。

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

看看这些文件,看看它们是否有助于推进您的项目。

于 2012-05-08T02:15:00.973 回答