Ruby on rails Rails Web服务SOAP客户端

Ruby on rails Rails Web服务SOAP客户端,ruby-on-rails,web-services,Ruby On Rails,Web Services,尝试通过soap访问web服务时出错 soap_client = SOAP::WSDLDriverFactory.new("http://api.upsidewireless.com/soap/Authentication.asmx?WSDL") driver = soap_client.createDriver @p = driver.GetParameters(:username => 'uname', :password => 'pword') #ERROR => wro

尝试通过soap访问web服务时出错

soap_client = SOAP::WSDLDriverFactory.new("http://api.upsidewireless.com/soap/Authentication.asmx?WSDL")
driver = soap_client.createDriver
@p = driver.GetParameters(:username => 'uname', :password => 'pword') #ERROR => wrong number of arguments (1 for 2)

我可以清楚地看到这个方法调用的两个参数。为什么会出现此错误?

不推荐使用WSDLDriver(从createDriver调用)。您应该使用“创建rpc驱动程序”。我从您的示例中得到了使用该方法的响应。有什么理由不使用“创建rpc驱动程序”吗?

WSDLDriver已被弃用(从createDriver调用)。您应该使用“创建rpc驱动程序”。我从您的示例中得到了使用该方法的响应。有什么理由不使用“create_rpc_driver”吗?

@james的答案是正确的,但仅供将来参考(因为这之前让我感到痛苦),这个电话:

driver.GetParameters(:username => 'uname', :password => 'pword') 
正在传递一个参数:哈希。你的每一个元素都不是一件事;它是一个包含键和值的散列元素。Ruby注意到了这一点,并将它们全部放入一个散列中。因此,您有效地传递了以下信息:

driver.GetParameters({:username => 'uname', :password => 'pword'}) 
这是在Ruby中调用方法时令人困惑的事情之一。如果将散列作为最后(或唯一)参数传递,则可以省略
{}
,大多数人都会这样做。有时很难弄清楚

如果您确实希望将其作为两个参数传递:

driver.GetParameters('uname', 'pword') 

@詹姆斯的答案是正确的,但仅供将来参考(而且因为这件事以前让我感到痛苦),这个电话:

driver.GetParameters(:username => 'uname', :password => 'pword') 
正在传递一个参数:哈希。你的每一个元素都不是一件事;它是一个包含键和值的散列元素。Ruby注意到了这一点,并将它们全部放入一个散列中。因此,您有效地传递了以下信息:

driver.GetParameters({:username => 'uname', :password => 'pword'}) 
这是在Ruby中调用方法时令人困惑的事情之一。如果将散列作为最后(或唯一)参数传递,则可以省略
{}
,大多数人都会这样做。有时很难弄清楚

如果您确实希望将其作为两个参数传递:

driver.GetParameters('uname', 'pword') 

没有,没有具体的原因。我想我是在用一个老例子。你的解决方案有效。谢谢不,没有具体原因。我想我是在用一个老例子。你的解决方案有效。谢谢你,谢谢,这很有用。我想知道为什么我会得到一些关于1对2参数的错误消息。谢谢,这非常有用。我一直想知道为什么我会得到一些1对2参数的错误消息。