在SOAP调用之后发送数据作为响应

时间:2011-11-09 20:39:54

标签: ruby-on-rails-3

所以我想这样:

  1. 从控制器中的外部网址接收POST并捕获数据
  2. 在SOAP请求中使用此数据;使用SOAP请求的响应来修改数据然后
  3. 在步骤1中对外部网址的响应中将数据发送回外部客户端。
  4. 我的方法似乎有一些时间问题,因为返回外部客户端的对象是空的。如果我注释掉我执行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 
    
    取而代之的是。任何建议将不胜感激。谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

罪魁祸首原来是PHP方面的设置。

之前(返回空对象):

curl_setopt($ch, CURLOPT_TIMEOUT, 15);

之后(返回完整对象):

curl_setopt($ch, CURLOPT_TIMEOUT, 60);