2009-11-17 50 views
1

我试过对asmx(简单的web服务)工作正常,但对于WCf我们需要做一些不同的事情。WCF + WebClient + Powershell

可以为WCF服务工作,因为我也得到了WCF服务的错误。 我刚刚在.net中创建了简单的WCF服务并尝试访问。但没有成功。

错误:

$Url = "http://localhost:4637/WCFService2/Service.svc" 

$webclient = new-object System.Net.WebClient 

$soapMessage = @" 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:tem="http://tempuri.org/"> 
    <soap:Header/> 
    <soap:Body> 
     <tem:GetData> 
     <!--Optional:--> 
     <tem:value>hji</tem:value> 
     </tem:GetData> 
    </soap:Body> 
</soap:Envelope> 
"@ 
$webclient.headers.Add("SOAPAction","http://localhost:4637/WCFService2/Service.svc/GetData") 
$webclient.headers.Add("Content-Type", "text/xml; charset=utf-8") 

$result = ([XML]$webclient.UploadString($Url, $soapMessage))#.envelope.body.GetWeatherByPlaceNameResponse.GetWeatherByPlaceNameResult 

$result 
+0

如果您能向我们显示实际的错误,这将是有用的。我最初的猜测是电话会失败,因为你的服务期望认证通话,而你的PS客户端代码正在进行非真实呼叫。 – 2009-11-17 06:30:54

+0

它给了我错误415. – 2009-11-18 14:58:13

+0

任何最终解决方案与完整的源代码? – Kiquenet 2013-03-15 10:24:48

回答

1

你真的想在SOAP包手动填写并发送?如果没有,那么假设你正在运行PowerShell 2.0,请在New-WebServiceProxy上执行Get-Help。此cmdlet将创建可直接编程的代理对象。

+0

我能够通过代理获取New-WebServiceProxy,但是为了访问我所需要的方法,将通过其他服务创建的LoginToken作为标头或cookie来访问服务的方法。所以我现在主要关心的是现在如何将这个认证令牌(Encrtpted token)传递给服务。 我的令牌看起来像“LogCert = 534635336bsdvshsg”。 对于SOAP UI,我只是将它作为cookie传递给标题。 – 2009-11-18 13:46:53

+0

执行$ proxy | Get-Member并查看是否有任何与设置安全令牌相关的成员。 – 2009-11-18 16:59:21

+0

我得到的方法,但得到我需要通过头部安全令牌的方法的响应。所以当我使用New-WebServiceProxy时,我将如何传递标题。 – 2009-11-19 05:00:26