WSDL导入器生成有问题的服务器

4

我一直在尝试搭建一个SOAP服务器,实现第三方制定的WSDL规范。我使用了Delphi的WSDL导入器,生成的代码部分如下:

miniPortType = interface(IInvokable)
['{824D172A-9C1F-D202-5B21-4C324553BCF0}']

  // Cannot unwrap: 
  // - Input element wrapper name does not match operation's name
  function miniService(const aMessage: MiniMessageType): MiniAnswerType; stdcall;
end;

当调用时,服务器会报错:No method named 'MiniMessageType' is supported by interface 'miniPortType'

只有在将函数名和消息的主要元素名称相同的情况下,我才能使其正常工作。

我认为应该可以使用不同的名称。至少soapUI不会抱怨。而且我实际上别无选择,只能按原样实现wsdl。有人知道我如何解决这个问题吗?

我正在使用Delphi 2007。

谢谢,Miel。


1
你使用的 Delphi 版本是哪个? - Tim Sullivan
那你最终做了什么呢?我希望在这里能找到一个有用的解决方案。 - Chris Thornton
3
@chris 我已经放弃了在Delphi中编写SOAP服务的尝试。我发现Delphi对SOAP支持的缺失令人不安,特别是对于服务而言。我现在用C#来编写那些服务。Embarcadero官方立场似乎是建议使用Prism来编写服务... - Miel
确实是令人悲伤的消息。感谢您的回复。 - Chris Thornton
缺少原始WSDL,但遇到了类似的情况,我认为这是文档字面量与RPC编码的区别:服务器端仍不支持文档字面量。 - Jeroen Wiert Pluimers
1个回答

1
如果我没记错的话,SOAP接口实际上是在定义的底部以“表格”的形式定义的,它用于在通信中进行Delphi类型和SOAP类型之间的转换。我过去曾通过手动更改表格构建调用来“纠正”这种情况,但你必须小心,并且可能还需要在适当的时候修改SOAP文本以使其适配。

我曾经遇到过类似的问题。最新版本的wsdlimp无法为soap头生成字段。但是,头部字段的类已经生成了。因此,为了运行该方法,我不得不手动实例化所有头部并在方法执行之前逐个发送。RIO.SoapHeader.Send(); 我希望这能帮助到某些人。 - John
@John 在客户端这方面,那确实是可行的方式。例如,请参见这些消息中的 Jean-Marie Babet:https://www.codenewsfast.com/cnf/article/752817581/permalink.art-ng1920q1653 和 https://www.codenewsfast.com/cnf/article/752817581/permalink.art-ng1920q1665 ,以及文档:http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/soapdefiningandusingsoapheaders_xml.html - Jeroen Wiert Pluimers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接