2010-01-02 8 views
11

इस सवाल से संबंधित है का उपयोग करते हुए: Python SOAP server/clientअजगर साबुन soaplib (सर्वर) और झाग (ग्राहक)

अजगर के साथ साबुन के मामले में, वहाँ साबुन सर्वर और झाग के रूप में soaplib (http://wiki.github.com/jkp/soaplib) (उपयोग करने के लिए सिफारिश कर रहे हैं https://fedorahosted.org/suds/) साबुन ग्राहक के रूप में। मेरा लक्ष्य पाइथन में साबुन सेवाओं को बनाना है जिसे कई ग्राहकों (जावा, आदि) द्वारा उपभोग किया जा सकता है। मैंने सोपलिब (http://trac.optio.webfactional.com/wiki/HelloWorld) से हैलोवर्ल्ड उदाहरण की कोशिश की। क्लाइंट सोपलिब का उपयोग करते समय यह अच्छी तरह से काम करता है।

फिर, मैंने ग्राहकों को हैलोवर्ल्ड सेवाओं का उपभोग करने वाले क्लाइंट के रूप में उपयोग करने की कोशिश की और यह असफल रहा। - यह क्यों हो रहा है? क्या सोपलिब सर्वर को विभिन्न ग्राहकों द्वारा उपभोग करने में समस्याएं हैं?

यहाँ सर्वर के लिए कोड:

from soaplib.client import make_service_client 
from SoapServerTest_1 import HelloWorldService 
client = make_service_client('http://localhost:7789/',HelloWorldService()) 
print client.say_hello("Dave",5) 

परिणाम::

from suds.client import Client 
url = 'http://localhost:7789/HelloWordService?wsdl' 
client1 = Client(url) 
client1.service.say_hello("Dave",5) 
:

>>> ['Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave'] 

यह झाग ग्राहक है

from soaplib.wsgi_soap import SimpleWSGISoapApp 
from soaplib.service import soapmethod 
from soaplib.serializers.primitive import String, Integer, Arraycode 
class HelloWorldService(SimpleWSGISoapApp): 
@soapmethod(String,Integer,_returns=Array(String)) 
def say_hello(self,name,times): 
    results = [] 
    for i in range(0,times): 
     results.append('Hello, %s'%name) 
    return results 

if __name__=='__main__': 
from cherrypy.wsgiserver import CherryPyWSGIServer 
#from cherrypy._cpwsgiserver import CherryPyWSGIServer 
# this example uses CherryPy2.2, use cherrypy.wsgiserver.CherryPyWSGIServer for CherryPy 3.0 
server = CherryPyWSGIServer(('localhost',7789),HelloWorldService()) 
server.start() 

यह soaplib ग्राहक है

परिणाम: अपने वर्ग में पुरातन आयात करने के लिए

>>> Unhandled exception while debugging... 
Traceback (most recent call last): 
    File "C:\Python25\Lib\site-packages\RTEP\Sequencing\SoapClientTest_1.py", line 10, in <module> 
    client1.service.say_hello("Dave",5) 
    File "c:\python25\lib\site-packages\suds\client.py", line 537, in __call__ 
    return client.invoke(args, kwargs) 
    File "c:\python25\lib\site-packages\suds\client.py", line 597, in invoke 
    result = self.send(msg) 
    File "c:\python25\lib\site-packages\suds\client.py", line 626, in send 
    result = self.succeeded(binding, reply.message) 
    File "c:\python25\lib\site-packages\suds\client.py", line 658, in succeeded 
    r, p = binding.get_reply(self.method, reply) 
    File "c:\python25\lib\site-packages\suds\bindings\binding.py", line 158, in get_reply 
    result = unmarshaller.process(nodes[0], resolved) 
    File "c:\python25\lib\site-packages\suds\umx\typed.py", line 66, in process 
    return Core.process(self, content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 48, in process 
    return self.append(content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 63, in append 
    self.append_children(content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 140, in append_children 
    cval = self.append(cont) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 61, in append 
    self.start(content) 
    File "c:\python25\lib\site-packages\suds\umx\typed.py", line 77, in start 
    found = self.resolver.find(content.node) 
    File "c:\python25\lib\site-packages\suds\resolver.py", line 341, in find 
    frame = Frame(result, resolved=known, ancestry=ancestry) 
    File "c:\python25\lib\site-packages\suds\resolver.py", line 473, in __init__ 
    resolved = type.resolve() 
    File "c:\python25\lib\site-packages\suds\xsd\sxbasic.py", line 63, in resolve 
    raise TypeNotFound(qref) 
TypeNotFound: Type not found: '(string, HelloWorldService.HelloWorldService,)' 
+1

मैं बस वर्तमान स्रोतों के साथ आज कोशिश की और मूल पोस्टर के रूप में बिल्कुल वही समस्या मिली। आयात विवरण जोड़ने से मदद नहीं मिली (वास्तव में, आप मूल कोड देख सकते हैं और आयातित प्राइमेटिव देख सकते हैं)। – user343574

उत्तर

1

कोशिश:

class HelloWorldService(SimpleWSGISoapApp): 
    from soaplib.serializers.primitive import String, Integer, Arraycode 
    @soapmethod(String,Integer,_returns=Array(String)) 
संबंधित मुद्दे