在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
delphi调用WEBservice刚开始是在Delphi6+sp1的环境下开发客户端程序,会出现Internal error(500)的错误或调用的web service的命名空间不正确,无法正确解析。解决办法是在用wsdl importer工具生成的代理类中插入以下两句话: ? InvRegistry.RegisterDefaultSOAPAction(TypeInfo(ServiceSoap), 'http://www.qk.com/HelloWorld');//① ? InvRegistry.RegisterInvokeOptions(TypeInfo(ServiceSoap), ioDocument); ①处方法的第二个参数HellowWorld前半部分表示web service类的命名空间,也就是在C#中定义的命名空间,代码片断如下:InvRegistry.RegisterInvokeOptions(TypeInfo(DataServiceSoap), ioDocument); 就报错,说InvRegistry没有RegisterInvokeOptions声明。解决办法是下载delphi6 sp2就可以了。 ... [WebService(Namespace:="http://www.qk.com/") [WebServiceBinding(ConformsTo=WsiProfiles.None)] [SoapRpcService(RoutingStyle=SoapServiceRoutingStyle.SoapAction)] public class Service? ? ...... 红色的两句代码非常重要,VS2005默认的web service binding值是BasicProfile1_1。否则在delphi调用web service返回的值总是空。另外在delphi6编译此句 这里贴出delphi6 sp下载的站点:http://se-ed.net/thaidelphicc/xml/updatepack/ 参考文档:http://www.cnblogs.com/mobile/archive/2006/04/27/386274.html 补充:delphi的wsdl importer工具会根据wsdl url来自动生成代理类,那么如果对应的WEB SERVICE的方法调用方式是document,代理类中会自动产生InvRegistry.RegisterInvokeOptions(TypeInfo(XXXXSoap), ioDocument); 如果是以RPC方式调用,则不会产生此代码。之前没有产生,是因为没有装SP2的问题。 VS2005的web service binding =BasicProfile1_1是document方式, web service binding =None是RPC方式,可以在VS2005中将WEB SERVICE生成的WSDL文件中查看各个方法的调用方式,如果是RPC,则无需写InvRegistry.RegisterInvokeOptions(TypeInfo(XXXXSoap), ioDocument); 反之则要写。 后来我碰到传递参数给WEB SERVICE,服务器端接受到的参数总是为空,原因是用document的方式去调用RPC方式的WEB SERVICE。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论