我正在尝试从powershell访问net.tcp端点。 我想将New-WebServiceProxy用于此目的,但我不确定是否可以这样做。 现在我得到了一个
+ FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.NewWebServiceProxy
当它指向wsdl时(我手写的很重,所以可能就是......)
答案 0 :(得分:4)
你根本做不到这一点。 New-WebServiceProxy不是WCF代理,它是一个http soap代理。
您可以使用svcutil.exe和Add-Type的组合在已安装svcutil.exe的计算机上动态生成代理。
此处提供了一个更复杂的示例in C#,您可以将其翻译为powershell。
答案 1 :(得分:4)
显然,自2008年12月22日以来,您已经能够做到这一点。Christian Glessner写了一个WCF代理生成器。
他描述的原始博文是here。他还在this PoshCode.org post中发布了该剧本。
我将代码更新为Powershell v2。我建议使用那个版本。我在this blog post上谈论我的版本。
如果您使用该代码,则从其他脚本中对其进行dotource,不要将其包含在内。以下是使用我的代码版本的示例:
# My example WCF service:
# https://github.com/justaprogrammer/EchoService
. .\wcf.ps1
$wsdlImporter = Get-WsdlImporter 'http://localhost.fiddler:14232/EchoService.svc/mex'
Get-WsdlImporter 'http://localhost.fiddler:14232/EchoService.svc' -HttpGet
Get-WsdlImporter 'http://localhost.fiddler:14232/EchoService.svc?wsdl' -HttpGet
$proxyType = Get-WcfProxyType $wsdlImporter
$endpoints = $wsdlImporter.ImportAllEndpoints();
$proxy = New-Object $proxyType($endpoints[0].Binding, $endpoints[0].Address);
$proxy = Get-WcfProxy 'http://localhost.fiddler:14232/EchoService.svc/mex'
$proxy.Echo("Justin Dearing");
Get-Help Get-WsdlImporter
Get-Help Get-WcfProxyType
Get-Help Get-WcfProxy