如何在PowerShell中通过New-WebServiceProxy传递SOAP嵌套参数?
解决PowerShell中New-WebServiceProxy传递嵌套SOAP参数的问题
当SOAP接口要求参数嵌套在formRequest节点下时,AddForm方法不再接受零散的单个参数,而是需要传入一个对应嵌套结构的对象实例,具体操作步骤如下:
获取嵌套参数的类型
首先需要确定formRequest对应的.NET类型全称(包含命名空间),可以通过以下方式查找:- 查看WSDL文档中
formRequest元素的定义,找到对应的命名空间和类型名; - 或者在PowerShell中执行命令查找相关类型:
$Forms.GetType().Assembly.GetTypes() | Where-Object { $_.Name -match "FormRequest" }
找到类型后,用命令获取该类型对象:
$formRequestType = $Forms.GetType().Assembly.GetType("你的命名空间.FormRequest")- 查看WSDL文档中
创建嵌套参数实例并赋值
用New-Object创建该类型的实例,然后给实例的属性逐一赋值(属性名对应SOAP接口中formRequest下的字段):$formRequest = New-Object $formRequestType # 替换为实际的属性名和值 $formRequest.Id = 1234 $formRequest.Name = "xyz" $formRequest.Code = "A1"调用AddForm方法
将创建好的嵌套参数实例传入AddForm方法,如果还有其他非嵌套的参数,按方法要求顺序添加即可:# 仅传嵌套参数的情况 $Forms.AddForm($formRequest) # 若还有其他参数,比如额外的标识参数 # $Forms.AddForm($formRequest, "额外参数值")
示例代码(假设类型为Acme.FormService.FormRequest)
# 获取嵌套参数类型 $formRequestType = $Forms.GetType().Assembly.GetType("Acme.FormService.FormRequest") # 创建实例并赋值 $formRequest = New-Object $formRequestType $formRequest.FormId = 1234 $formRequest.FormName = "xyz" $formRequest.FormCode = "A1" # 调用接口 $result = $Forms.AddForm($formRequest)
内容的提问来源于stack exchange,提问作者David T
相关产品推荐
相关产品推荐

