2015-09-01 3 views
0

Я пытаюсь подключить PowerShell к службе WCF. Я могу подключиться к сервису с помощью браузера и с C# /. Net клиентами; Однако, когда я пытаюсь подключиться с помощью PowerShell New-WebService Командлета я получаю следующий результат:Ошибка нулевой ссылки из командлета New-WebService

PS Z:\> $SVC = New-WebServiceProxy -uri http://localhost:8733/Design_Time_Addresses/VIPService?Wsdl 
New-WebServiceProxy : Object reference not set to an instance of an object. 
At line:1 char:27 
+ $SVC = New-WebServiceProxy <<<< -uri http://localhost:8733/Design_Time_Addresses/VIPService?Wsdl 
+ CategoryInfo   : NotSpecified: (:) [New-WebServiceProxy], NullReferenceException 
+ FullyQualifiedErrorId : System.NullReferenceException,Microsoft.PowerShell.Commands.NewWebServiceProxy 

Почему я получаю пустую ссылку ошибку?

ответ

1

Я считаю, что это происходит потому, что New-WebServiceProxy знает, как обращаться с обычными веб-сервисами; он не знает о привязках WCF и тому подобных.

Вы можете выполнить то, что вы пытаетесь сделать, используя клиент, сгенерированный svcutil.exe. Вот пример использования проекта WCF по умолчанию, который генерируется VS 2015 (который имеет метод веб-службы, называемый GetData, который принимает int и возвращает string). (Это предполагает, что ваша служба WCF работает так, что svcutil.exe может получить WSDL):

# Generate the proxy code 
svcutil.exe http://localhost:55028/Service1.svc?wsdl 

# Build the proxy DLL 
csc /t:library .\Service1.cs 

# Load the DLL 
Add-Type -Path .\Service1.dll 

$binding = new-object System.ServiceModel.BasicHttpBinding 
$endpoint = new-object System.ServiceModel.EndpointAddress(“http://localhost:55028/Service1.svc") 

# Create an instance of the client 
$client = New-Object Service1Client($binding, $endpoint) 

# Call a method using your client 
$client.GetData(4) 

svcutil.exe использует WSDL для создания класса под названием Service1.cs; мы можем использовать csc.exe (или VS, если хотите), чтобы скомпилировать класс в Service1.dll и загрузить его в PowerShell с помощью Add-Type. Я использую BasicHttpBinding - вам нужно будет посмотреть на свою конфигурацию, чтобы узнать, какая привязка подходит для вашей службы. После того, как у вас есть привязка и конечная точка, вы можете создать экземпляр клиента и запустить на нем методы вызова.

Смежные вопросы