Мне кажется, проблема в том, что ваш код создает HttpWebRequest , а не запрос WCF. (Другими словами, он просто выполняет HTTP-запрос GET к URL-адресу без информации SOAP или .NET Remoting.)
Вы должны быть в состоянии следовать этим инструкциям, чтобы создать правильную конечную точку:
http://msdn.microsoft.com/en-us/magazine/cc163647.aspx#S11
Это должно выглядеть примерно так:
$httpBinding = New-Object System.ServiceModel.BasicHttpBinding
$endpointAddress = New-Object System.ServiceModel.EndpointAddress 'http://myserver.com/myservice/dosomething'
$contractDescription = [System.ServiceModel.Description.ContractDescription]::GetContract([IYourInterface], $httpBinding, $endpointAddress)
$serviceEndpoint = New-Object System.ServiceModel.Description.ServiceEndpoint $contractDescription
$channelFactory = New-Object "System.ServiceModel.ChannelFactory``1[IYourInterface]" $serviceEndpoint
$webProxy = $channelFactory.CreateChannel();
$webProxy.yourServiceMethod();
Обратите внимание, что вам нужно будет импортировать DLL с классом IYourInterface
, чтобы это работало:
[void] [Reflection.Assembly]::LoadFrom('path/to/your.dll')
В качестве альтернативы, если для службы определен WSDL, вы можете следовать этим гораздо более простым инструкциям для доступа к службе:
http://blogs.technet.com/heyscriptingguy/archive/2009/11/17/hey-scripting-guy-november-17-2009.aspx
В качестве альтернативы вы можете выяснить, как должен выглядеть HTTP-запрос SOAP, и сформировать его самостоятельно в HttpWebRequest
.