Подходит ли Python для написания стандартных, совместимых и полных веб-сервисов SOAP?

Я использовал несколько библиотек мыла Python (SOAPpy, soaplib и Twisted wrapper вокруг SOAPpy), чтобы написать свой веб-сервис мыла.

Когда я использовал клиентов python (SOAPpy.SOAPProxy и SUDS), я мог взаимодействовать со своим веб-сервисом (возвращая объекты простого и сложного типа).

Но когда я попробовал использовать C # ASP.net, у меня возникло много проблем. Я столкнулся с проблемой возврата простых типов (int, string, double, boolean) с некоторым взломом библиотеки SOAPpy. Но я все еще не могу вернуть ComplexTypes из SOAPpy.

Мне не удалось найти полную совместимую альтернативную библиотеку Python для написания моего веб-сервиса.

Основной вопрос: Мы будем очень признательны за любые предложения / примеры для возврата сложного типа, совместимого с dot net, из веб-службы python.

Примечание: Мне пришлось немного взломать SOAPpy, чтобы он заработал. И мне пришлось вручную написать файл wsdl в случае SOAPpy.


person Sury Soni    schedule 29.07.2010    source источник
comment
Я не пробовал, но вы можете проверить pywebsvcs.sourceforge.net/zsi.html   -  person James Black    schedule 29.07.2010
comment
какие данные возвращает сервер?   -  person PirosB3    schedule 29.07.2010
comment
@ (Джеймс Блэк) zsi является частью того же семейства библиотек, что и SOAPpy. Но я посмотрю в код, если в zsi есть более новая версия SOAPpy. @ (PirosB3) - Мой сервер в некоторых функциях API возвращает сложный тип (список словаря Python, например [{'field_1': 'value1', 'field_2': 'value2'}, {'field_1': 'value3', 'поле_2': 'значение4'}].   -  person Sury Soni    schedule 30.07.2010
comment
Я считаю, что от разработки SOAPpy отказались в пользу ZSI; хотя, когда я в последний раз смотрел, также не было особой активности по разработке ZSI. suds - единственная активно разрабатываемая библиотека SOAP для Python, которую я недавно видел.   -  person mithrandi    schedule 04.08.2010
comment
С моим недавним разговором в списке рассылки мыла python code.google.com/p/pysimplesoap работает хорошо для возврата сложных типов для клиентов dot net. Мне все еще нужно интегрировать это в витую библиотеку Python, чтобы лучше ее использовать. Если кто-то уже работает над этим, я рад сотрудничеству. Но мой вопрос о питоне как о языке, который на 100% должен быть совместим с другими библиотеками на других языках, остается открытым.   -  person Sury Soni    schedule 20.08.2010


Ответы (1)


На мой взгляд, совместимость библиотек Python SOAP с другими платформами оставляет желать лучшего.

Думаю, здесь есть две проблемы:

  • Во-первых, совместимость веб-сервисов между стеками веб-сервисов - это скорее стремление, чем реальность. Например, посмотрите this вопрос, чтобы узнать, как использовать веб-службы между Java и WCF.
  • При этом концепция WSDL, которая в значительной степени представляет собой типизацию во время компиляции, не соответствует исходной философии Python, поэтому в нее было вложено меньше усилий.

Я не работал с веб-сервисами больше года, поэтому, возможно, что-то изменилось. Но совет такой же, как и в предыдущем вопросе:

  • Начните с написания WSDL, если вы используете более одного языка / библиотеки.
  • Как скопировано из другого вопроса, «начните с XSD, но ограничьтесь основными типами. Примитивы, сложные типы, составленные из примитивов, массивы того же самого».
  • В конце концов, я решил использовать suds для веб-клиентов Python, после экспериментов с ним и soappy и zsi. Это было через некоторое время с использованием библиотеки на основе C (gsoap) и связывания к нему из Python.
  • Меня никогда не устраивали реализации серверов на Python, поэтому я использовал для создания серверов Python и подключения к ним из другой библиотеки, которая может экспортировать сервисы SOAP (в моем случае Java или C, вы, вероятно, будете использовать C #). Подключение обычно осуществляется по гораздо более простому протоколу.
  • При этом, если вы начнете с WSDL, вы, вероятно, получите хорошие результаты, используя soaplib или, возможно, zsi. Но я боюсь, что почти невозможно обойтись без медленного построения ваших типов при проверке совместимости.
person Muhammad Alkarouri    schedule 29.07.2010
comment
Из-за некоторой технической сложности моего проекта я должен написать свой веб-сервис только на Python. Но клиент мог прийти с любого языка. Для python клиент SOAPpy.SOAPProxy работает нормально, но меня беспокоят C # и java. Я написал свой файл wsdl от руки, чтобы убедиться, что я использую примитивные типы и сложные типы, состоящие из примитивных типов. Но SOAPpy возвращает следующий список: ‹result SOAP-ENC: arrayType = ns1: SOAPStruct [3] xsi: type = SOAP-ENC: Array xmlns: ns1 = soapinterop.org/xsd SOAP-ENC: root = 0 id = i3 ›....... Можете ли вы указать мне пример возврата сложного типа из SOAPpy и использования dot net - person Sury Soni; 30.07.2010