使用PowerShell的New-WebServiceProxy访问net.tcp端点

时间:2011-03-14 21:40:20

标签: wcf web-services powershell

我正在尝试从powershell访问net.tcp端点。 我想将New-WebServiceProxy用于此目的,但我不确定是否可以这样做。 现在我得到了一个

    
+ FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.NewWebServiceProxy 

当它指向wsdl时(我手写的很重,所以可能就是......)

2 个答案:

答案 0 :(得分:4)

你根本做不到这一点。 New-WebServiceProxy不是WCF代理,它是一个http soap代理。

您可以使用svcutil.exeAdd-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