【发布时间】:2021-01-12 22:25:53
【问题描述】:
我正在尝试从 PowerShell 调用 WCF 服务。
这是我目前在网上找到的一些杂项示例所得出的结论:
# Create the WebSvcURL variable and pass the WSDL URL
$WebSvcURL= “http://localhost/DEMO/SetPassKey/SetPassKey_Logic_SetPassKeyWebService_SetPassKeyWCF.svc?wsdl“
#Create the Web Service Proxy Object
#$serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -Namespace "http://Sample.SetPassKey.Logic" -Class Program -UseDefaultCredential
$serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -UseDefaultCredential
# Create Request Object
$namespace = $serviceProxy.getType().namespace
write-host "Namespace=$namespace"
$req = New-Object ($namespace + "/SetPassKeyOrchWebRequest")
$resp = New-Object ($namespace + "/SetPassKeyOrchWebResponse")
$req.NewPassKey = "TEST" # <--- PUT YOUR NEW PASSWORD HERE
$resp = $serviceProxy.SetPassKey($req)
$resp
我对一些事情感到困惑:
- 如果我需要包含-Namespace 和-Class 参数。由于它查看 WSDL,我不明白为什么它需要 -Namespace 和 -Class。
- 如何构造请求/响应对象
- URL 应该是 Web 服务的实际 URL 还是应该包含 ?wsdl 后缀
更新: 我发现了这个blog,它指出:
-Namespace 参数是可选的,如果不是 指定然后它从 cmdlet 中获取一个随机值。
我以为它是一个 XML 命名空间,但它是一个 .NET 框架命名空间。
# Create the WebSvcURL variable and pass the WSDL URL
$WebSvcURL= “http://localhost/DEMO/SetPassKey/SetPassKey_Logic_SetPassKeyWebService_SetPassKeyWCF.svc?wsdl“
#Create the Web Service Proxy Object
$serviceProxy = New-WebServiceProxy -Uri $WebSvcURL -UseDefaultCredential -Namespace "MyNamespace" -Class Program
# Create Request Object
$req = New-Object ("MyNamespace.SetPassKeyOrchWebRequest")
$resp = New-Object ("MyNamespace.SetPassKeyOrchWebResponse")
$req.NewPassKey = "TEST" # <--- PUT YOUR NEW PASSWORD HERE
$resp = $serviceProxy.SetPassKey($req)
$resp
现在我收到此错误: 使用“1”参数调用“SetPassKey”的异常:“底层连接已关闭:发生意外错误 接收。”
Web 服务可以由 C# 控制台程序调用,所以我知道它可以工作。只需要从 PowerShell 中调用它。
【问题讨论】:
-
有没有wsdl后缀的区别在于wsdl可以获取和调用元数据,可以用来创建客户端代理类。这是关于如何使用PowerShell调用WCFService的官方文档:docs.microsoft.com/en-us/powershell/module/…
-
我当然去过那个页面。它给出了没有类/命名空间的示例 1,以及带有类/命名空间的示例 2。我的一个问题是,如果我有 WSDL,为什么还需要类/命名空间?
-
@TheobaldDu 该页面也未能显示如何构建请求/响应对象;他们的例子只是使用简单的类型。
标签: wcf powershell-4.0