Успешно вызываете службу WCF из Ruby?Кто-нибудь? - PullRequest
3 голосов
/ 20 августа 2010

Я пытаюсь интегрировать приложение rails с сервисом WCF. Я пробовал soap4r и Savon без любви вообще. Насколько я могу судить, ни одна из библиотек Ruby не поддерживает новейшую версию SOAP.

Ошибка, которую я получил, была:

Невозможно обработать сообщение, потому что тип содержимого 'text / xml; charset = UTF-8' не был ожидаемый тип «Приложения / мыло + XML; кодировка = UTF-8' приложения / мыло + XML. '; кодировка = UTF-8' .

Мне удалось преодолеть эту ошибку, изменив привязку службы WCF с wsHttpBinding на basicHttpBinding, но затем получил новую ошибку:

Сообщение с действием '' не может быть обработано в получателе из-за несоответствия ContractFilter в EndpointDispatcher. Это может быть связано либо с несоответствием контракта (несоответствующие действия между отправителем и получателем), либо с несоответствием привязки / безопасности между отправителем и получателем. Убедитесь, что отправитель и получатель имеют одинаковый контракт и одну и ту же привязку (включая требования безопасности, например, Сообщение, Транспорт, Нет). (SOAP :: FaultError)

Теперь эта ошибка оставляет меня озадаченным, потому что я не вижу способа настроить конечные точки ни в одной из библиотек Ruby. Кто-нибудь знает?

Кто-нибудь успешно вызывал службы WCF из Ruby? 'Application / soap + xml; кодировка = UTF-8' .

Ответы [ 3 ]

3 голосов
/ 31 августа 2010

Обратите внимание, что у меня это работает ... после того, как я изменил web.config для службы на basicHttpBinding, Savon может отправлять и получать сообщения. Это только soap4r, который не может успокоиться и выдает ошибку Action ''.

1 голос
/ 08 октября 2012

Я столкнулся с той же проблемой с Savon с моим веб-сервисом WCF. Ошибка содержимого связана с тем, что ваша служба ожидает SOAP 1.2, но по умолчанию Savon отправляет запрос как SOAP 1.1.

Значением Content-Type для 1.1 является 'text / xml; charset = UTF-8', но если сервер сконфигурирован для 1.2 (что и является wsHttpBinding), Content-Type должен быть 'application / soap + XML; кодировка = UTF-8' .

Я нашел этот метод на сайте Savon :

response = client.request :get_user do
  soap.version = 2
end
1 голос
/ 22 августа 2010

это может быть не то, что вы хотите услышать, но я недавно взаимодействовал с SOAP в Ruby .... Это совсем не весело, ни один из доступных гемов не является полным, стабильным или хорошо документированным, и все, кажется, падают вниз при добавлении крошечной сложности (передача объекта, содержащего некоторые значения, а не просто передача целого числа или строки).

Я закончил тем, что вынюхивал запрос, сделанный клиентом .net, затем строил объекты, которые имеют метод .to_xml, брал объект XML Builder и добавлял свои собственные вещи ..

Он обрабатывает запрос, а затем каждый метод запроса на обслуживание настраивается для извлечения информации, необходимой для результата.

Очень ручной способ сделать это, и нужно добавлять больше для каждого метода, который мне нужно использовать, но, по крайней мере, он работает!

Некоторые другие парни, с которыми я работаю, имели успех, используя JRuby и Axis. Я держался в стороне от этого, так как хотел чистого решения Ruby.

Извините, я не могу вам помочь ... если вы хотите, я опубликую свой код для создания запроса на мыло ...

...