“No Native to Message converter set”是什么意思?

时间:2010-11-10 15:46:44

标签: delphi soap delphi-2007

我需要与一些Web服务交谈,因此我导入了WSDL。我现在尝试调用它,但它会报告此异常:No Native to Message converter set由于我无权在此处发布此服务的代码段,因此非常非常烦人。仍然,必须尝试...有没有人有关于如何解决此错误的一些建议?


错误在函数TRIO.Generic中的rio.pas中生成。这一行:

  if not Assigned(FConverter) then
    raise Exception.Create(SNoMessageConverter);

由于未知原因,FConverter设置为nil,因此会生成异常。甚至在发送请求之前就会发生这种情况。没有任何东西发送到服务,因为Delphi甚至在它可以调用服务之前就崩溃了。


WSDL导入选项,选中选项:

  • One Outparam is Return
  • 放松文字参数
  • 生成析构函数
  • 警告评论
  • 将字符串映射到widestring
  • 生成有关类型和接口的详细信息
  • 使用HTTP绑定忽略端口类​​型
  • 不要发出未使用的类型
  • 验证枚举类型
  • 导入错误类型
  • 导入标题类型
  • 处理包含和导入的架构
  • 将类别名生成为类类型
  • 处理可支付和可选元素

实际上,我的系统是新的,大约3天前安装了Delphi,导入这个WSDL是我做的第一件事,主要使用这些默认设置。

1 个答案:

答案 0 :(得分:2)

使用SoapUI使用WSDL并创建模拟服务。将您的应用指向您的SoapUI模拟服务,您可以捕获您的出站请求。现在,您可以转身将这些请求提交给服务并查看响应。这应该可以让您了解消息的来源。即它是来自Delphi的SOAP库,因为它无法理解,或者它是来自Web服务本身,因为IT在您的请求中无法理解?

或者,您可以在Delphi中执行此操作:通过利用HttpRIO对象的RIO_BeforeExecute / RIO_AfterExecute事件来拦截入站/出站XML。

如果您的流量是http(使用SSL但可能更难),您也可以使用Fiddler2拦截。

获得原始XML后,使用SoapUI提交请求,并查看获得的内容。您可能会发现您的请求需要“调整”,或者如果SoapUI中的所有内容都很好,您可能需要在反序列化之前调整响应。