这两天在学习调用webservice,发现Postman直接调用时,返回
no namesapce on "myservice" element. you must send a soap message
找了很久,才明白,Postman 不会自动为请求添加命名空间,得手动在请求的 XML 数据中添加。在Postman中调用成功后,想着用delphi10写个程序测试调用,delphi10导入了wsdl后,直接使用postman中测试成功的xml数据又会返回xml格式错误的问题。又困扰了一天。后来用wireshark抓包,发现delphi编写的程序所发送的数据比postman发送的数据多了一层<SOAP-ENV:Envelope包裹的数据。到此,结论应该是 :
Delphi 中使用
Import WSDL
工具导入 WSDL 文件时,Delphi 会根据 WSDL 文件的定义生成相应的客户端代码。这些生成的代码会包含必要的命名空间信息,以确保发送的 SOAP 请求能够被 WebService 服务器正确识别。
以上结论是问大模型得到的。