SOAP в .NET Core?

Как вы делаете SOAP в .NET Core? Существуют ли какие-либо эквиваленты Apache CXF в .Net Core (а не просто простой SOAP-клиент, но полнофункциональный стек)?

Извините, если это очень простой вопрос, мой поиск до сих пор не дает четкого ответа.

Ответы

Ответ 1

В настоящее время Microsoft не планирует поставлять среду на стороне сервера SOAP для .NET Core. Также не доступны WCF ServiceHost и ASMX. Слишком рано говорить, какой из стеков не-Microsoft будет прыгать и быть доминирующим игроком.

С введением ASP.NET Web API и восстанием конечных точек REST WCF был мертв. Клиент WCF представляет собой историю взаимодействия, а не историю переходов (полная история здесь: http://blog.tonysneed.com/2016/01/06/wcf-is-dead-long-live-mvc-6/)

Ответ 2

Несколько месяцев назад из-за ограничений WCF-клиентов (при интеграции с веб-службой Java кто-то создал класс ответа с тем же именем, что и метод и в том же пространстве имен, и когда клиент WCF отправлял запрос, не удалось выполнить сериализацию - не удается найти связанный с ней вопрос в SO) Мне пришлось создать HTTP-клиент SOAP, который использовал подчеркивание HttpClient. В конце концов я выпустил версию с открытым исходным кодом (https://github.com/gravity00/SimpleSOAPClient), которую мы успешно используем в производстве и поддерживаем приложения .NET Core и Xamarin. Не стесняйтесь попробовать. Я рекомендую версию 2.0.0-RC03 из-за некоторых важных улучшений с версии 1.x.

Ответ 3

Здесь у вас есть небольшой трюк, который я использовал таргетинг "framework 452" в ASP.Net 5.0 Web App.

К сожалению, новая "Добавить подключенную услугу" → "Служба WCF" работает только при таргетинге .NET Core, поэтому я создал базовое консольное приложение с такими же имя как мое веб-приложение.

Консольные приложения позволяют добавлять "Сервисную ссылку" . После добавления VS2015 создает все ссылки на службы в папке "Ссылки на службы" .

Просто переместите содержимое папки в веб-решение и используйте конструктор клиента, который принимает параметры HttpBindings и EndPoint.

В моем случае я подключаюсь к Echosign клиенту инициализации службы следующим образом:

using (EchoSignDocumentService16PortTypeClient service = new EchoSignDocumentService16PortTypeClient(new BasicHttpBinding(BasicHttpSecurityMode.Transport), new EndpointAddress(adddress)))
{
...
}

Ответ 4

Мне нужно SOAP для моих старых клиентов, поэтому я создал отдельную SOAP-библиотеку, совместимую с моими устаревшими клиентами, используя платформу .NET, размещенную в отдельной среде. (SOAP.mywebsite.com). Затем на www.mywebsite.com(созданный с помощью asp.net Core, у меня есть интерфейс для отдыха. SOAP-слой вызывает интерфейс для остальных. Библиотека для вызова интерфейса останова создается с помощью Swashbuckle.

Ответ 5

Чтобы обойти эту проблему... Я создал пакет nuget в .Net 4.5, подключающемся к собственным SOAP-клиентам, которые не поддерживаются в .NET Core. Затем я создал приложение .Net, ориентированное на инфраструктуру .net. Это позволило мне использовать пакет nuget без ошибок.