The vendor provided a working sample client that I was able to run with TcpMon and compare the XML being sent with what was being generated by suds. It turns out the issue was the empty <SOAP-ENV:Header/>
tag.
I created a message plugin to filter out the empty Header during the sending phase and now it works. Here is the updated code:
import re
from suds.client import Client
from suds.plugin import MessagePlugin
class HeaderFilter(MessagePlugin):
def sending(self, context):
context.envelope = re.sub(r'<[A-Za-z0-9_\-:]*Header/>', '', context.envelope)
return context
client = Client('http://url-for-my-service?wsdl', plugins=[HeaderFilter()])
result = client.service.StartSession('userid','passwd')
I might have been more specific instead of using the regex but I don't know if it will always use the SOAP-ENV prefix or not.