首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby和SOAP创建web服务代理和命名空间

Ruby和SOAP创建web服务代理和命名空间
EN

Stack Overflow用户
提问于 2013-12-07 05:21:39
回答 1查看 861关注 0票数 2

我是肥皂新手,但几天来我一直在努力解决这个问题,我不知道自己哪里出了问题。我正在尝试使用Ruby与VMware站点恢复管理器对话

我有一个powershell脚本,可以成功地用于登录。我想用这个powershell脚本用红宝石重写它。

以下是wsdl文件:

代码语言:javascript
复制
https://srm-vcenter-a:8095/srm?wsdl

http://pastebin.com/xJ6AwLaC

代码语言:javascript
复制
https://srm-vcenter-a:8095/srm-Service?wsdl

http://pastebin.com/nmH5mzdH

powershell代码

代码语言:javascript
复制
$Server = "srm-vcenter-a"
$UserName = "administrator"
$Password = "mypw"

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Write-Host "Connecting to SRM"
$webSvc = New-WebServiceProxy ("https://" + $Server + ":8095/srm-Service?wsdl") -Namespace SRM
$srm = New-Object SRM.SrmService
$srm.Url = "Https://" + $Server + ":9007"
$srm.Timeout = 600000
$srm.CookieContainer = New-Object System.Net.CookieContainer

$srmSvcRef = New-Object SRM.ManagedObjectReference
$srmSvcRef.Type = "SrmServiceInstance"
$srmSvcRef.Value = $srmSvcRef.Type

$srmSvcContent = $srm.RetrieveContent($srmSvcRef)

$srm.SrmLoginLocale($srmSvcRef, $UserName, $Password, $null)

$srmObject = New-Object System.Object
$srmObject | Add-Member -Type NoteProperty -value $Server -Name SRMServer
$srmObject | Add-Member -Type NoteProperty -value $srm -Name SRMService
$srmObject | Add-Member -Type NoteProperty -value $srmSvcContent -Name SRMContent

...

我试过使用Savon、soap4r和handsoap,我不知道我错过了什么。

以下是不起作用的Savon代码。

代码语言:javascript
复制
require 'savon'
require 'rubygems'

client = Savon.client do
  wsdl "https://srm-vcenter-a:8095/srm?wsdl"
  #endpoint "https://srm-vcenter-a:8095/srm-Service?wsdl"
  endpoint "http://srm5-vcenter-a:9007"
  namespace "https://srm-vcenter-a/sdk/srm"
  #proxy "https://srm-vcenter-a:8095/srm-Service?wsdl"
  ssl_version :TLSv1
  ssl_verify_mode :none
  convert_request_keys_to :lower_camelcase
end

message = { username: 'administrator', password: 'mypw' }
response = client.call(:srm_login_locale, message: message)

提前感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2013-12-11 00:38:21

简单地看了一下您的代码之后,在PowerShell中您似乎已经

代码语言:javascript
复制
$srm.SrmLoginLocale($srmSvcRef, $UserName, $Password, $null)

而在Ruby你有

代码语言:javascript
复制
message = { username: 'administrator', password: 'mypw' }
response = client.call(:srm_login_locale, message: message)

在PowerShell代码中,有4个值传递给SrmLoginLocale方法:

  1. $srmSvcRef
  2. $UserName
  3. $Password
  4. $null

在ruby代码中,您在调用中缺少了第一个参数和第四个参数。尝试在红宝石中创建等效的$srmSvcRef。我不是一个ruby程序员,但我认为代码应该类似于:

代码语言:javascript
复制
srm_svc_ref = { value: 'SrmServiceInstance', type: 'SrmServiceInstance'}
message = { _this: srm_svc_ref, username: 'administrator', password: 'mypw', locale: nil}
response = client.call(:srm_login_locale, message: message)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20437950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档