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 без ошибок.