我似乎收到此错误消息:
(a:ActionNotSupported) 由于 EndpointDispatcher 的 ContractFilter 不匹配,接收方无法处理带有 Action 'GetServices' 的消息。这可能是因为合约不匹配(发送方和接收方之间的操作不匹配)或发送方和接收方之间的绑定/安全不匹配。检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息、传输、无)。
我认为这与安全/绑定设置有关。我的连接使用 HTTP,带有基本的 httpbinding。像往常一样,我已经做了很多寻找答案的工作,但无法修复它,而且这里没有人拥有 Ruby on Rails 方面的专业知识。
帮助将不胜感激。
下面是我在 Ruby on Rails 中的代码,它初始化服务然后调用它。注意:我可以很好地连接到它。它已经成功地报告了可用的方法。只是调用方法似乎是问题所在。我已经使用相同的代码成功连接到在线测试服务。我用萨文。
def test
puts "web_service: IN"
client = Savon::Client.new do
wsdl.document = "http://hidden.co.uk/myService.svc?wsdl"
end
@response = client.request "GetServices", :xmlns => "http://tempuri.org/" do
soap.header = {}
soap.body = {
"CostCentreNo" => 1,
"filter" => 0
}
end
puts '##########################'
puts @response.to_hash;
end
以下是我的 Ruby on Rails 发送的内容:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:wsdl="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<GetServices xmlns="http://tempuri.org/">
<CostCentreNo>1</CostCentreNo>
<filter>0</filter>
</GetServices>
</env:Body>
</env:Envelope>
这是 WCF 测试客户端发送的内容,(有效)
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IIBCSServices/GetServices</Action>
</s:Header>
<s:Body>
<GetServices xmlns="http://tempuri.org/">
<CostCentreNo>0</CostCentreNo>
<filter>0</filter>
</GetServices>
</s:Body>
</s:Envelope>