我正在尝试使用PowerShell命令New-WebServiceProxy来创建与WCF服务的连接。
我已启动并运行WCF服务(并使用C#代码),但以下PowerShell代码失败:
PS C:\>$uri = "http://localhost/Person.svc?wsdl"
PS C:\>$client = New-WebServiceProxy -Uri $uri
New-WebServiceProxy : Exception has been thrown by the target of an invocation
At line:1 char:30
+ $client = New-WebServiceProxy <<<< -Uri $uri
+ CategoryInfo : NotSpecified: (:) [New-WebServiceProxy], TargetInvocationException
+ FullyQualifiedErrorId : System.Reflection.TargetInvocationException,Microsoft.PowerShell.Commands.NewWebServiceProxy
这可能是什么问题?
编辑;不知道它是否相关,但服务使用一些自定义SOAP标头作为凭据。
答案 0 :(得分:3)
尝试使用svcutil.exe
参数从Windows SDK执行/validate
实用程序。有关/validate
的参数用法的详细信息,请查看实用程序用法。请注意,在紧要关头,您可以使用svcutil.exe来创建您将编译的代理类。回到PowerShell 2.0和New-WebProxy前一天,这是how we created web service proxies。
答案 1 :(得分:1)
您还可以尝试script version of New-WebServiceProxy,它基于wsdl.exe
答案 2 :(得分:1)
您使用的是什么WCF绑定?
默认情况下,使用wsHttpBinding的WCF项目假设客户端将支持比powershell的new-webserviceproxy cmdlet创建的代理中更多的WS- *功能。
更改(或创建新的)使用basicHttpBinding的端点绑定,并确保元数据支持HTTP GET; 。e.g,:
<system.serviceModel>
<services>
<service name="WcfService1.Service1" behaviorConfiguration="WcfService1.Service1Behavior">
<endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1">
</endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="WcfService1.Service1Behavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>