Использовать веб-сервис SOAP с GET вместо POST - PullRequest
1 голос
/ 13 июня 2019

Мне нужно вызвать внешний веб-сервис SOAP через HTTP.
У меня есть файл WSDL и я добавил его в Visual Studio через «Добавить ссылку на сервис».Затем Visual Studio добавила несколько файлов, в справочном файле я могу найти это:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(ConfigurationName="Service.IService")]
public interface IService {

    [System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IService/Function", ReplyAction="http://tempuri.org/IService/FunctionResponse")]
    namespace.Service.ExecuteFunctionResponse ExecuteFunction(namespace.Service.FunctionRequest request);
}

Кроме того, асинхронная версия этого вызова и объекты для отправки получения и т. Д.

Чтобы позвонить в службу, я добавил следующий код:

BasicHttpBinding binding = new BasicHttpBinding();     
EndpointAddress endpointAddress = new EndpointAddress("the address");
serviceChannel = new ServiceClient(binding, endpointAddress).ChannelFactory.CreateChannel();
Response response = serviceChannel.ExecuteFunction(new Request(...));

Это приводит к тому, что я получаю исключение, метод ошибки 405. Не разрешен.
Таким образом, я должен использовать HTTP-запрос GET вместоPOST-запрос по умолчанию.Но я не могу найти, где это можно изменить с помощью этого способа работы.

Итак, где я могу установить метод HTTP для этого вызова веб-службы?

1 Ответ

2 голосов
/ 27 июня 2019

Сервисы SOAP используют HTTP POST, потому что они обмениваются сообщениями XML (которые, как правило, являются сложными) и не могут быть переданы в строке запроса.

Вы уверены, что должны использовать HTTP GET?Возможно, ошибка, которую вы получаете "метод 405 не разрешен", вызвана неправильной конфигурацией.Я бы дважды проверил, правильно ли задан URL-адрес конечной точки SOAP, и что дополнительные требования безопасности не требуются.

EDIT В прошлом существовала практика создания веб-служб ASP.NET, которыепринял бы также GET.Но они не ожидают сообщений XML.Вместо этого вам нужно будет передать все параметры в строке запроса.Например: https://foo.bar/service.asmx/Func?param1=X&param2=Y (где param1 и param2 - ожидаемые параметры).

Таким образом, можно вызвать WebService без WSDL и использования метода GET.Вы можете достичь этого, используя HttpClient, например.Недостатком этого подхода является то, что вам придется иметь дело с простыми данными вместо объектов.

Надеюсь, это может помочь.

...