2010-08-20 5 views
3

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

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

Cannot process the message because the content type 'text/xml;charset=UTF-8' was not the expected type 'application/soap+xml; charset=utf-8'.'application/soap+xml; charset=utf-8'.

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

The message with Action '' cannot be processed at the receiver, due to a ContractFilter mismatch at the EndpointDispatcher. This may be because of either a contract mismatch (mismatched Actions between sender and receiver) or a binding/security mismatch between the sender and the receiver. Check that sender and receiver have the same contract and the same binding (including security requirements, e.g. Message, Transport, None). (SOAP::FaultError)

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

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

ответ

3

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

+0

Признаюсь, я не знаю Ruby, но у меня были проблемы с WCF и Java, потому что WSDL содержит ссылки на внешние .xsd-файлы. Вы можете создать один WSDL с помощью инструмента svcutil.exe. Вы также можете найти эти инструменты WCF полезными: http://wcfextras.codeplex.com/ –

+0

Я видел это сообщение так много раз. Поэтому я пытался в течение нескольких дней поговорить с сервисом SOAP WCF с мылом. Я просто получил его на работу. Ключ отнимает версию Savon, которую вы используете. Savon 2.0 - Я бы установил wsdl для переменной клиента. Затем при вызове client.operations результат # => [] Savon 3.0 (неустойчивый) вы создаете клиентские операции, а затем вызывается Операция. Операция = {имя_источника, имя_порта, имя_источника} Настройте объект Operations.body и вызовите его. см. Http://savonrb.com/version3/getting-started.html для получения дополнительной справки. 3,0 работало для basicHTTPBinding – JamesDeHart

1

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

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

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

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

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

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

+1

ли Савон не работать для вас? Каковы были проблемы, которые имел Савон? –

+0

@Steve Weet: Я попытался использовать его, он продолжал бросать исключения в код Savon. Не помню точно, какая проблема, но не могла понять, что я делаю неправильно из документов или поиска в Интернете, поэтому я сдался. Btw - я живу в Rainham –

+1

У меня был некоторый успех с Savon, но SOAP с Ruby - не счастливый опыт. С тех пор, как ActionWebService был удален из Rails Core, никто не заинтересован в SOAP.Жаль, что вы живете в корпоративном мире, где вы должны поддерживать SOAP. Приятно знать, что я не единственный рубист в Медуэй. –

1

Я столкнулся с тем же вопросом с Савоном с моим веб-сервисом 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 website:

response = client.request :get_user do 
    soap.version = 2 
end