扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
<portType name="nntpSoapPortType"> <operation name="getheaders" parameterOrder="newsgroup numitems"> <input message="tns:getheaders" /> <output message="tns:getheadersresponse" /> </operation> <operation name="getarticle" parameterOrder="newsgroup article"> <input message="tns:getarticle" /> <output message="tns:getarticleresponse" /> </operation> </portType> |
在进行了下面的这些微小的改变,VS.Net向导能够读取WSDL并且自动地生成一个代理。在编译了这个代理之后,它被包含在一个ASP.Net页面中。然而,当这个ASP.Net页面被执行:“ message does not have a correct SOAP root XML tag.”,这个错误被当作一个SOAP错误从Web服务中返回。为了精确地评估这个错误,代理调用被一个名为Proxy Trace的公用程序使用,以便代理生成SOAP包装。这可以通过把下列代码添加进ASP.Net页面来实现:
msNews.Proxy = new System.Net.WebProxy( "http://localhost:8080");
在察看了由.Net代理生成的SOAP包装之后,我有点奇怪为什么会返回这个错误,因为实际上一个相对的SOAP包装被生成并被发送到Web服务。即使在尝试了好几个转化成代理代码之后这个错误依然持续。代码段列表2显示了从PHP Web服务返回的完整的SOAP错误包装。
在使用VS.Net中创建的代理对象的好几个把ASP.Net页面与PHP Web服务连结的不成功的尝试之后,我决定从头开始创建SOAP包装以便执行更有效的程序调试。{起先,它看起来好像由.Net代理生成的模式域名空间可能是问题的关键,因为.Net使用2001模式规范而PHP服务使用的是1999版本的规范。
然而,我把自定义的SOAP包装改为用1999版本代替2001版本,错误依然存在。在尝试了好几个其他的小的改变之后,我决定把SOAP包装使用的域名空间前缀和正文元素从soap (由.Net代理生成)改为SOAP - ENV,因为我看见在SOAP错误信息中返回了SOAP - ENV前缀。(见代码2)这表面上看上去微不足道的改变竟解决了问题!当处理任何请求的时候,PHP服务显然需要SOAP - ENV前缀,而拒绝不包含SOAP - ENV前缀的要求。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者