我有一个由 WSDL 文件描述的工作 SOAP 服务器:http: //pastebin.com/YXBbszqE。但是,问题在于远程客户端以这种格式发送消息:
<?xml version="1.0" standalone="no"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
<soap12:Body>
<Query>
<request>
<MerchantNumber>7436</MerchantNumber>
<RestoCode>9999</RestoCode>
<WaiterID>1</WaiterID>
<FolioInfo>
<FolioType>FolioTypeCard</FolioType>
<Folio>1234124234123123</Folio>
</FolioInfo>
</request>
</Query>
</soap12:Body>
</soap12:Envelope>
这被我的服务器拒绝并显示以下错误消息:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
<env:Body>
<env:Fault>
<env:Code>
<env:Value>rpc:ProcedureNotPresent</env:Value>
</env:Code>
<env:Reason>
<env:Text>Procedure not present</env:Text>
</env:Reason>
</env:Fault>
</env:Body>
</env:Envelope>
我做了一些调试,发现问题是什么,但我不知道如何解决这个问题。一个有效的 SOAP 请求是:
<?xml version="1.0" standalone="no"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="http://MD.org/">
<soap12:Body>
<ns1:Query>
<request>
<MerchantNumber>7436</MerchantNumber>
<RestoCode>9999</RestoCode>
<WaiterID>1</WaiterID>
<FolioInfo>
<FolioType>FolioTypeCard</FolioType>
<Folio>1234124234123123</Folio>
</FolioInfo>
</request>
</ns1:Query>
</soap12:Body>
</soap12:Envelope>
反应很好。请注意标头中的xmlns:ns1="http://MD.org/"和Query 标签上的ns1:。
有没有办法让我的服务器在请求通过时知道它是什么命名空间?
谢谢,您的帮助将不胜感激。