Я пытался вызвать мыльную службу.Мой вызов успешен, но он возвращает пустое значение. Ниже я приложил схему запроса и ответа мыла.Он принимает массив 1d в качестве входных данных и возвращает этот массив.
Схема запроса
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CalculateWeb1D xmlns="http://tempuri.org/"> <HCID>string</HCID> <jaggedobjDataMICRO> <string>string</string> <string>string</string> </jaggedobjDataMICRO> <numeratorID>int</numeratorID> </CalculateWeb1D> </soap:Body> </soap:Envelope>
Схема ответа
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CalculateWeb1DResponse xmlns="http://tempuri.org/"> <CalculateWeb1DResult> <string>string</string> <string>string</string> </CalculateWeb1DResult> </CalculateWeb1DResponse> </soap:Body> </soap:Envelope>
Мой код для вызова мыльной службы
from SOAPpy import WSDL import warnings warnings.simplefilter('ignore',DeprecationWarning) import SOAPpy wsdlFile = 'http://204.9.76.243/nuCast.DataFeedService/Service1.asmx?WSDL' server = WSDL.Proxy(wsdlFile) server.soapproxy.config.dumpSOAPOut = 1 server.soapproxy.config.dumpSOAPIn = 1 print server.CalculateWeb1D(str(1073757),[1,2],99)
и мой вывод
*** Outgoing SOAP ****************************************************** <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema" > <SOAP-ENV:Body> <CalculateWeb1D SOAP-ENC:root="1"> <v1 xsi:type="xsd:string">1073757</v1> <v2 SOAP-ENC:arrayType="xsd:int[2]" xsi:type="SOAP-ENC:Array"> <item>1</item> <item>2</item> </v2> <v3 xsi:type="xsd:int">99</v3> </CalculateWeb1D> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ************************************************************************ *** Incoming SOAP ****************************************************** <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><CalculateWeb1DResponse xmlns="http://tempuri.org/" /></soap:Body></soap:Envelope> ************************************************************************ <SOAPpy.Types.structType CalculateWeb1DResponse at 171814380>: {}
Плз, помогите мне найти решение ....
Вот рабочая версия, которая использует suds client :
suds
#!/usr/bin/env python from suds.xsd.doctor import Import, ImportDoctor from suds.client import Client # enable logging to see transmitted XML import logging logging.basicConfig(level=logging.INFO) logging.getLogger('suds.client').setLevel(logging.DEBUG) # fix broken wsdl # add <s:import namespace="http://www.w3.org/2001/XMLSchema"/> to the wsdl imp = Import('http://www.w3.org/2001/XMLSchema', location='http://www.w3.org/2001/XMLSchema.xsd') imp.filter.add('http://tempuri.org/') wsdl_url = 'http://204.9.76.243/nuCast.DataFeedService/Service1.asmx?WSDL' client = Client(wsdl_url, doctor=ImportDoctor(imp)) # make request arrayofstring = client.factory.create('ArrayOfString') arrayofstring.string = [1,2] print client.service.CalculateWeb1D(1073757, arrayofstring, 99).string
DEBUG:suds.client:sending to ( http://204.9.76.243/nuCast.DataFeedService/Service1.asmx) message: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:ns0="http://tempuri.org/" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <ns1:Body> <ns0:CalculateWeb1D> <ns0:HCID>1073757</ns0:HCID> <ns0:jaggedobjDataMICRO> <ns0:string>1</ns0:string> <ns0:string>2</ns0:string> </ns0:jaggedobjDataMICRO> <ns0:numeratorID>99</ns0:numeratorID> </ns0:CalculateWeb1D> </ns1:Body> </SOAP-ENV:Envelope> DEBUG:suds.client:headers = { 'SOAPAction': u'"http://tempuri.org/CalculateWeb1D"', 'Content-Type': 'text/xml; charset=utf-8'}
DEBUG:suds.client:http succeeded: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <CalculateWeb1DResponse xmlns="http://tempuri.org/"> <CalculateWeb1DResult> <string>1</string> <string>2</string> </CalculateWeb1DResult> </CalculateWeb1DResponse> </soap:Body> </soap:Envelope> [1, 2]