在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
跟踪发现:竟然没有参数传递给Webservice,参数或者是null或者是初始值。通过查看Post的数据包:
<?xml version="1.0"?>
发现以下部分不正确:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xm lns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XML Schema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encodin g/" xmlns:NS2="http://microsoft.com/wsdl/types/"> <NS1:GetServiceInfo xmlns:NS1="http://goldentek.biz/"> <passport xsi:type="xsd:string">[email protected]</passport> <oem xsi:type="NS2:guid">{xxxxxxxx-8456-550a-8bb9-65d484f8bc3b}</oem> <codePage xsi:type="xsd:int">936</codePage> </NS1:GetServiceInfo> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
<NS1:GetServiceInfo xmlns:NS1="http://goldentek.biz/">
问题已经确定是Delphi的封装问题。进一步测试发现,在2005下的Service,如果有参数delphi都不能正确封装。难道只有把服务转到2003?或者自己封装Webservie调用?这两个方法都要很多工作量。<passport xsi:type="xsd:string">[email protected]</passport> <oem xsi:type="NS2:guid">{341a4fbb-8456-550a-8bb9-65d484f8bc3b}</oem> <codePage xsi:type="xsd:int">936</codePage> </NS1:GetServiceInfo> 下面先看一下2003和2005生成的wsdl的不同点(完整wsdl看附录): 1、2005增加了对soap1.2的支持 2、2005如果没有描述会没有<documentation xmlns="http://schemas.xmlsoap.org/wsdl/" /> 标记。 3、2005没有显式设置styly,而采用的是默认值 <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" /> 第二个可以排除,它不会产生这样的错误,最有可能的是第一条,delphi对soap1.2支持不好。而且发现:“User-Agent: Borland SOAP 1.2”,证明delphi确实用的是Soap1.2。手动修改Wsdl,去掉对1.2的支持重新生成代理类,测试扔出现问题。 是第三个?可是省略style也是符合wsdl规范的。修改wsdl加上style,测试成功。真是没有想到会是这里的问题,修改起来竟是如此简单! 后面还发现delphi不能正确解析nil如:<ErrCode xsi:nil="true"/>,这样在.net中就不能用nullable值了,如:int? 总结: 可以看出delphi对webservie的封装还是很有问题的,规范都没有实现!对xml的支持也不完善。 因此在webservice的开发中不要用高级的特性,因为某些语言对service的封装还是不好。 还真是怀疑wse的前途,还是因为某些语言调用起来很麻烦。 附: 正确的Post格式 1、
<?xml version="1.0"?>
2、<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xm lns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XML Schema-instance"> <SOAP-ENV:Body> <GetServiceInfo xmlns="http://goldentek.biz/"> <passport>[email protected]</passport> <oem>{xxxxxxxx-8456-550a-8bb9-65d484f8bc3b}</oem> <codePage>936</codePage> </GetServiceInfo> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body> <m:GetServiceInfo xmlns:m="http://goldentek.biz/"> <m:passport>[email protected]</m:passport> <m:oem>341a4fbb-8456-550a-8bb9-65d484f8bc3b</m:oem> <m:codePage>936</m:codePage> </m:GetServiceInfo> </SOAP-ENV:Body> </SOAP-ENV:Envelope> wsdl规范: 下面是1.1和2.0的wsdl,webmethod是:
}
>
>
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论