Взаимодействие веб-сервисов WCF с Java кажется удивительно проблематичным. Есть хорошие ресурсы?

13

В рамках недавнего проекта нашей команде разработчиков на основе .Net была поручена интеграция с целым рядом веб-сервисов на основе Java по всему миру, и у нас действительно было удивительно (ну, мы, конечно, больше не удивлены) большое количество проблем потому что XML, сгенерированный WCF, не принимается сервисами java.

Похоже, что на эту тему не так много полезной информации, мы получили несколько полезных советов из отличного блога Ярона Нейва на WCF, http://webservices20.blogspot.com , а также на форуме MSDN WCF http: //social.msdn.microsoft.com/Forums/en-US/wcf/threads .

Есть ли здесь кто-нибудь, кто действительно чувствует, что они это поняли, и знает исчерпывающий ресурс по этому вопросу? Заинтересовались бы советами по книгам, блогам или любым сайтам.

Редактировать:
я разрываюсь с настройкой ответа, принятого в этой теме, потому что каждый из двух лучших ответов имеет какое-то значение:
1. Вероятно, мы закончим делать больше реализаций HTTP Webrequest вместо борьбы с WCF.
2. Но WCF Express Interop Bindings 1.0 также был очень разумным советом.

Бьорн
источник
Я ничего не знаю о WCF, но производит ли он XML-пакеты на основе SOAP или просто кусок XML, который может быть использован службой RESTful?
Мартейн Вербург
1
Возвращает XML, JSON или RDF + XML.
Алан Б.
Можете ли вы привести примеры того, что пошло не так между клиентом wcf и веб-сервисом java? Вы имеете в виду webservice = мыло или что-то другое?
k3b
1
Этот вопрос выходит за рамки данного вопроса, вы можете проверить мой профиль переполнения стека для примеров. Здесь я просто хочу услышать, есть ли у кого-то еще такая же проблема с клиентами WCF (или .Net в целом), взаимодействующими с веб-сервисами, основанными на других платформах.
Бьёрн,

Ответы:

15

Ах да ... SOAP, хваленый святой Грааль компьютеров. Лингва франка, которая обещала взаимодействие между системами по всему миру.

И тогда вы попадаете в различия между реализациями SOAP на Java и PHP и .NET. Или даже между сервисом WebSphere SOAP и клиентом Apache SOAP. Неважно иметь дело с различными стандартами совместимости WS-I. Теперь, пожалуйста, скажите мне, почему вам нужен стандарт совместимости для протокола, который был создан для совместимости , поговорим об иронии (и я имею в виду настоящую иронию, а не иронию марки Аланис Морриссетт ).

Единственный раз, когда вы не столкнетесь с проблемами при установлении связи между двумя конечными точками SOAP, это когда они находятся на одной и той же платформе, и в большинстве случаев платформа будет иметь более эффективный протокол удаленной работы.

Здесь я говорю о том, что по большей части SOAP бесполезен. Теперь мыло в нижнем регистре, я использую это каждый день, и я благодарен, что большинство людей делают то же самое.

При этом, если вы настаиваете на том, чтобы бить головой о кирпичную стену. Вот хорошее место для начала. У Microsoft есть набор привязок, позволяющих взаимодействовать с большинством основных серверов Java. Самое интересное, конечно, выяснить, какие из них работают с какими услугами вы интегрируете.

Майкл Браун
источник
5
SOAP - это новый CORBA :)
gbjbaanb
Почему-то я, кажется, довольно часто успешно это делаю в проектах по интеграции клиентов. YMMV по-видимому.
David J. Liszewski
9

На мой взгляд, ваши наблюдения довольно точны. Реализации высокого уровня на основе XML связи, как правило , не совместимы с различными платформами, даже если они будут так называемыми «SOAP». Незначительные различия в реализации, возможно, оба в рамках реализованного стандарта, создают проблемы в реальной жизни.

Моя рекомендация для поставщиков услуг: используйте простую реализацию, а не очень сложную и теоретически лучшую реализацию. Например, не включайте какие-либо чрезвычайно сложные схемы аутентификации, если они вам не нужны.

Моя рекомендация для потребителей услуг (я полагаю, вы): когда вы общаетесь с реализацией высокого уровня на платформе, отличной от вашей, переходите на реализацию более низкого уровня. Внезапно все становится довольно просто, если вы просто выясните, что представляет собой фактический XML для отправки, а затем будете использовать обычные хорошие методы кодирования для достижения этой цели, в качестве альтернативы настойчивому использованию высокоуровневой реализации вашей собственной платформы.

Надеюсь, это не было слишком абстрактно. Короче говоря , когда вы подключаетесь к платформе .NET к платформе Java, вы можете просто собрать заголовки и xml в запрос HttpWebRequest и отправить его таким образом.

Нильс Бринч
источник
4

У вас будут те же проблемы, связанные с использованием веб-служб PHP.

Наш единственный ответ на это состоял в том, чтобы изменить тип протокола на REST, а не на SOAP. У нас никогда не было SOAP-компонентов для взаимодействия, так что для Simple!

gbjbaanb
источник
В большинстве случаев у нас нет абсолютно никакой возможности изменить существующие веб-сервисы каким-либо образом, нам придется подключаться к ним с помощью SOAP, несмотря ни на что. Поэтому я боюсь, что нет ответа Решено для вас. ;)
Бьёрн
1
> «в любом случае нет возможности изменить существующие веб-сервисы»; готовьтесь, вы находитесь в грубой поездке. Я только что выздоровел после 2-х недель головокружения, пытаясь вызвать веб-сервис wcf / soap из java / android. Мое спасение состояло в том, что я - в отличие от вас - имел доступ к сервису и сделал его доступным для конечной точки REST / JSON. Путь Если сможешь.
BaBu
@ Бьёрн: ну, извини, что сказал тебе об этом, но если использовать технический термин, ты облажался. Я предполагаю, что единственный ответ - перестать использовать WCF и использовать другой клиент SOAP.
gbjbaanb
Наша команда смеется и плачет от ваших ответов. :) Спасибо господа.
Бьорн