我需要与一些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导入选项,选中选项:
实际上,我的系统是新的,大约3天前安装了Delphi,导入这个WSDL是我做的第一件事,主要使用这些默认设置。
答案 0 :(得分:2)
使用SoapUI使用WSDL并创建模拟服务。将您的应用指向您的SoapUI模拟服务,您可以捕获您的出站请求。现在,您可以转身将这些请求提交给服务并查看响应。这应该可以让您了解消息的来源。即它是来自Delphi的SOAP库,因为它无法理解,或者它是来自Web服务本身,因为IT在您的请求中无法理解?
或者,您可以在Delphi中执行此操作:通过利用HttpRIO对象的RIO_BeforeExecute / RIO_AfterExecute事件来拦截入站/出站XML。
如果您的流量是http(使用SSL但可能更难),您也可以使用Fiddler2拦截。
获得原始XML后,使用SoapUI提交请求,并查看获得的内容。您可能会发现您的请求需要“调整”,或者如果SoapUI中的所有内容都很好,您可能需要在反序列化之前调整响应。