所以我想这样:
我的方法似乎有一些时间问题,因为返回外部客户端的对象是空的。如果我注释掉我执行SOAP调用的Savon代码,那么对象就完成了。这是我使用Rails 3.0.9,Savon 0.9.7
所做的简短版本1)效果很好
#
# get object from POST
#
string = request.body.read
@myobject = ActiveSupport::JSON.decode(string)
2)也很有效(留下大部分Savon魔法,因为反应恰恰应该如此)
...
response = client.request :urn, "MySOAPOperation" do
...
3)这是我有点“离开”的地方
response_hash =response.to_hash[:my_soap_operation_response]
@myobject.status = response_hash[:status].to_s
logger.info ("Status: " + @myobject.status)
#
# at this point myobject updated values are confirmed in log
#
respond_to do |format|
format.json { render :json => @myobject }
end
现在,响应已正确转发回步骤1.外部客户端,但@myobject为空。如果我注释掉SOAP请求和响应,则会发送完整的@myobject以及对客户端的响应。我认为这是一个时间问题,因为我也通过注释掉SOAP请求并添加
来获得相同的结果sleep 20
取而代之的是。任何建议将不胜感激。谢谢你的阅读。
丹
答案 0 :(得分:0)
罪魁祸首原来是PHP方面的设置。
之前(返回空对象):
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
之后(返回完整对象):
curl_setopt($ch, CURLOPT_TIMEOUT, 60);