Python-Suds.Client.Service problem, identifying printout instead of method text

Hi I am fairly new to Python and web services and I got started trying to use web services methods in WSDL via Python. Now, when I run the following code, I get the value "". I'm going to get the return value of the GetMessage method (simple Hello World), but instead get this ID for the method. Is there a way to get this return value?

import logging
import sys
from suds.client import Client
sys.setrecursionlimit(2000)
url='http://localhost:50774/HostDevServer/HelloWorldService.svc?wsdl'
client = Client(url)
example = client.service.GetMessage
print example

      

I have also tried the following code

import logging
import sys
from suds.client import Client
sys.setrecursionlimit(2000)
url='http://localhost:50774/HostDevServer/HelloWorldService.svc?wsdl'
client = Client(url)
example = client.service.GetMessage()
print example

      

and this returns the following error message:

No handlers could be found for logger "suds.client"

Traceback (most recent call last):
  File "C:\Python27\exampleForSuds.py", line 7, in <module>
    example = client.service.GetMessage()
  File "build\bdist.win32\egg\suds\client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "build\bdist.win32\egg\suds\client.py", line 602, in invoke
    result = self.send(soapenv)
  File "build\bdist.win32\egg\suds\client.py", line 649, in send
    result = self.failed(binding, e)
  File "build\bdist.win32\egg\suds\client.py", line 708, in failed
    raise Exception((status, reason))
Exception: (415, u'Unsupported Media Type')

      

I can work around the first error noted without handlers by adding:

logging.getLogger('suds.client').setLevel(logging.CRITICAL)

      

But the rest of the error message will remain. Am I missing something? I've searched for hours and can't find much that shows a similar problem.

UPDATE:

This is what is printed in the first segment of the code:

<suds.client.Method instance at 0x02D9FC38>

      

I tried sebastians idea and I get this:

Traceback (most recent call last):
  File "C:\Python27\exampleForSuds.py", line 10, in <module>
    example = client.service.GetMessage()
  File "build\bdist.win32\egg\suds\client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "build\bdist.win32\egg\suds\client.py", line 602, in invoke
    result = self.send(soapenv)
  File "build\bdist.win32\egg\suds\client.py", line 649, in send
    result = self.failed(binding, e)
  File "build\bdist.win32\egg\suds\client.py", line 708, in failed
    raise Exception((status, reason))
Exception: (400, u'Bad Request')

      

The meaning of the client for Sebastian's idea is as follows:

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913

Service ( HelloWorldService ) tns="http://tempuri.org/"
   Prefixes (1)
      ns0 = "http://schemas.microsoft.com/2003/10/Serialization/"
   Ports (1):
      (WSHttpBinding_IHelloWorldService)
         Methods (1):
            GetMessage()
         Types (3):
            ns0:char
            ns0:duration
            ns0:guid

      

Update2: log request to Sebastians

DEBUG:suds.transport.http:sending:
URL:http://localhost:50774/HostDevServer/HelloWorldService.svc
HEADERS: {'SOAPAction': u'"http://tempuri.org/IHelloWorldService/GetMessage"', 'Content-Type': 'application/soap+xml; charset="UTF-8"', 'Content-type': 'application/soap+xml; charset="UTF-8"', 'Soapaction': u'"http://tempuri.org/IHelloWorldService/GetMessage"'}
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:GetMessage/></ns1:Body></SOAP-ENV:Envelope>
ERROR:suds.client:<?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:GetMessage/>
   </ns1:Body>
</SOAP-ENV:Envelope>

Traceback (most recent call last):
  File "C:\Python27\exampleForSuds.py", line 11, in <module>
    example = client.service.GetMessage()
  File "build\bdist.win32\egg\suds\client.py", line 542, in __call__
    return client.invoke(args, kwargs)
  File "build\bdist.win32\egg\suds\client.py", line 602, in invoke
    result = self.send(soapenv)
  File "build\bdist.win32\egg\suds\client.py", line 649, in send
    result = self.failed(binding, e)
  File "build\bdist.win32\egg\suds\client.py", line 708, in failed
    raise Exception((status, reason))
Exception: (400, u'Bad Request')

      

Code for this error:

import logging
import sys
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.transport.http').setLevel(logging.DEBUG)
from suds.client import Client
sys.setrecursionlimit(2000)
url='http://localhost:50774/HostDevServer/HelloWorldService.svc?wsdl'
headers = {'Content-Type': 'application/soap+xml; charset="UTF-8"'}
client = Client(url,headers=headers)
print client
example = client.service.GetMessage()
print example

      

Final update:

Found a solution to the problem, it turned out that the problem has nothing to do with the python code, but the web.config for the web service. It should use basicHttpBinding

+3


source to share


1 answer


To fix the error 'Unsupported Media Type'

, you can specify the type supported by the server, for example:

headers = {'Content-Type': 'application/soap+xml; charset="UTF-8"'}
client = Client(wsdl_url, headers=headers)

      



To see which foams are actually sent, you can set up logging:

import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.transport.http').setLevel(logging.DEBUG)

      

+3


source







All Articles