gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:51:29 32 4
gpt4 key购买 nike

我是 SOAP 新手,但我已经为此苦苦挣扎了好几天,无法弄清楚我哪里出错了。我正在尝试使用 Ruby 与 VMware Site Recovery Manager 对话

我有一个可以成功用于登录的 powershell 脚本。我想使用这个 powershell 脚本并用 ruby​​ 重新编写它。

这是 wsdl 文件:

https://srm-vcenter-a:8095/srm?wsdl

http://pastebin.com/xJ6AwLaC

https://srm-vcenter-a:8095/srm-Service?wsdl

http://pastebin.com/nmH5mzdH

powershell代码

$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 代码。

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)

提前感谢所有帮助

最佳答案

简要查看您的代码后,您似乎在 PowerShell 中拥有

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

在 Ruby 中你有

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

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

  1. $srmSvcRef
  2. $用户名
  3. $密码
  4. $null

在 ruby​​ 代码中,您缺少调用中的第一个参数和第四个参数。尝试在 ruby​​ 中创建 $srmSvcRef 的等价物。我不是 ruby​​ 程序员,但我认为代码看起来像:

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)

关于Ruby 和 SOAP 创建 Web 服务代理和命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20437950/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com