Kev*_*inM 5 ruby wcf soap ruby-on-rails savon
我有一个很好的任务,就是使用带有Rails的大量SOAP api.SOAP服务有三种不同的绑定; wsHttpBinding,wsHttpBinding与x509,以及自定义绑定.我只能使用wsHttpBinding来击中两个端点,但是第三个端点需要用户名和密码,这与之无关.我因为证书而避免使用x509,并且自定义绑定在SoapUI中运行良好,但是使用Savon我得到以下错误.
由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action''的消息.这可能是由于合同不匹配(发送方与接收方之间的操作不匹配)或发送方与接收方之间的绑定/安全性不匹配.检查发送方和接收方是否具有相同的合同和相同的绑定(包括安全要求,例如消息,传输,无).
我已经使用了Savon生成的确切XML并将其放入SoapUI并且它可以工作.
这是一个具有约束力的问题吗?有没有办法告诉它使用这个自定义绑定?
这是我在App.config中找到的自定义绑定
<bindings>
<customBinding>
<binding name="cust">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
<binding name="cust1">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
<binding name="cust2">
<textMessageEncoding messageVersion="Soap12" />
<httpTransport />
</binding>
</customBinding>
</bindings>
<endpoint address="http://api.xyz.com/stuff.svc/cust"
binding="customBinding" bindingConfiguration="cust" contract="stuff.Xstuff"
name="cust" />
Run Code Online (Sandbox Code Playgroud)
编辑#1
这是我当前的客户端设置,这有助于它.
@client = Savon.client(
wsdl: 'http://api.xyz.com/stuff.svc?wsdl',
wsse_auth: %w'username password',
wsse_timestamp: true,
raise_errors: false,
log: true,
log_level: :debug,
soap_version: 2,
pretty_print_xml: true,
convert_request_keys_to: :none,
use_wsa_headers: true,
headers: {'Content-Type' => 'application/soap+xml; charset=utf-8'}
Run Code Online (Sandbox Code Playgroud)
编辑#2
我发现了这个问题.Savon没有像SoapUI那样在Content-Type中设置动作.感谢@RicardoPontual建议再次尝试比较Savon和SoapUI请求,这让我更仔细地看一下并注意到这个问题.
headers: {'Content-Type' => 'application/soap+xml;charset=UTF-8;action="tempuri.org/stuf??f/set_table_stuff"'}
Run Code Online (Sandbox Code Playgroud)
根据我们在评论中讨论的内容,添加带有您想要使用的操作的操作的标头可能会解决问题,如下所示:
\n\n@client = Savon.client(\n wsdl: \'http://api.xyz.com/stuff.svc?wsdl\',\n wsse_auth: %w\'username password\',\n wsse_timestamp: true,\n raise_errors: false,\n log: true,\n log_level: :debug,\n soap_version: 2,\n pretty_print_xml: true,\n convert_request_keys_to: :none,\n use_wsa_headers: true,\n headers: {\'Content-Type\' => \'application/soap+xml;charset=UTF-8;action="tempuri.org/stuf\xe2\x80\x8c\xe2\x80\x8bf/set_table_stuff"\'}\n );\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |