سؤال

وأنا أحاول أن تجعل قليلا خدمة ويب "مرحبا العالم" مع جانغو بعد قليل من الدروس، ولكن أنا ضرب نفس الحاجز مرارا وتكرارا. لقد تعريف view.py وsoaplib_handler.py:

وview.py:

from soaplib_handler import DjangoSoapApp, soapmethod, soap_types

class HelloWorldService(DjangoSoapApp):

    __tns__ = 'http://saers.dk/soap/'

    @soapmethod(_returns=soap_types.Array(soap_types.String))
    def hello(self):
      return "Hello World"

وsoaplib_handler.py:

from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers import primitive as soap_types

from django.http import HttpResponse


class DjangoSoapApp(SimpleWSGISoapApp):

    def __call__(self, request):
        django_response = HttpResponse()
        def start_response(status, headers):
            status, reason = status.split(' ', 1)
            django_response.status_code = int(status)
            for header, value in headers:
                django_response[header] = value
        response = super(SimpleWSGISoapApp, self).__call__(request.META, start_response)
        django_response.content = "\n".join(response)

        return django_response

ويبدو أن "استجابة فائقة = ...." الخط هو إعطائي المتاعب. عندما تصل حمولة /hello_world/services.wsdl المعينة في url.py أحصل على:

وAttributeError في /hello_world/service.wsdl "الوحدة" كائن ليس له السمة 'tostring'

لرسالة الخطأ الكاملة، انظر هنا: http://saers.dk:8000/hello_world/service.wsdl

هل لديكم أي اقتراح لماذا أحصل على هذا الخطأ؟ وحيث ElementTree محددة؟

هل كانت مفيدة؟

المحلول

وzdmytriv خط

soap_app_response = super(BaseSOAPWebService, self).__call__(environ, start_response)

ويجب أن تبدو

soap_app_response = super(DjangoSoapApp, self).__call__(environ, start_response)

وبعد ذلك المثال الخاص بك يعمل.

نصائح أخرى

ولست متأكدا إذا كان هذا سوف يحل مشكلتك، ولكن الديكور على وظيفة مرحبا بك يقول الذي يفترض أن يعود صفيف سلسلة، ولكن كنت في الواقع تعود سلسلة

وحاول _returns = soap_types.String بدلا

وراي

ونسخ / لصق من خدمة بلدي:

# SoapLib Django workaround: http://www.djangosnippets.org/snippets/979/
class DumbStringIO(StringIO):
    """ Helper class for BaseWebService """
    def read(self, n): 
        return self.getvalue()

class DjangoSoapApp(SimpleWSGISoapApp):
    def __call__(self, request):
        """ Makes Django request suitable for SOAPlib SimpleWSGISoapApp class """

        http_response = HttpResponse()

        def start_response(status, headers):
            status, reason = status.split(' ', 1)
            http_response.status_code = int(status)

            for header, value in headers:
                http_response[header] = value

        environ = request.META.copy()
        body = ''.join(['%s=%s' % v for v in request.POST.items()])
        environ['CONTENT_LENGTH'] = len(body)
        environ['wsgi.input'] = DumbStringIO(body)
        environ['wsgi.multithread'] = False

        soap_app_response = super(BaseSOAPWebService, self).__call__(environ, start_response)

        http_response.content = "\n".join(soap_app_response)

        return http_response

المتكررة لديه علة. قراءة تعليقات الماضيين من أن عنوان الموقع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top