<p>虽然没有经过认证的标准,但如果你必须使用肥皂,肥皂水是你最好的选择。sud在大型wsdl上可能会很慢,而这正是它们正在研究的问题。</p>
<p>同时,如果您不希望WSDL经常更改,那么有两个选项可以为您提供很大的速度:</p>
<ol>
<li>将WSDL下载到本地主机</li>
<li>使用缓存</li>
</ol>
<p><strong>下载您的WSDL</p>
<p>对于大型WSDL,问题的一部分是,首先必须每次下载WSDL,这会增加开销。sud在启动时需要花时间下载和解析整个WSDL,以确保它没有更改。</p>
<p>如果可以将其下载到本地系统,然后使用URL中的<code>file://</code>方案将其传递给<code>Client</code>构造函数。由于Suds使用<code>urllib2</code>作为HTTP传输,这是完全合法的。</p>
<p>现在,因为您没有在WSDL URL中提供主机名,所以还必须传递一个指定SOAP应用程序的实际URL的<code>location</code>参数。</p>
<p>下面是一个例子:</p>
<pre><code>from suds.client import Client
# The service URL
soap_url = 'http://myapp.example.notreal/path/to/soap'
# The WSDL URL, we wont' use this but just illustrating for example. This
# would be the file you download to your system and save as wsdl_file
wsdl_url = 'http://myapp.example.notreal/path/to/soap?wsdl'
# The full path to the downloaded WSDL file on your local system
wsdl_file = '/path/to/myapp.wsdl'
wsdl_url = 'file://' + wsdl_file # Override original wsdl_url
client = Client(url=wsdl_url, location=soap_url)
</code></pre>
<p>如果你感兴趣的话,我已经在我的工作中使用了这种方法并且已经<a href="https://github.com/jathanism/netscaler-api/">open sourced the code</a>。</p>
<p><strong>缓存WSDL</p>
<p>另一种选择是使用Suds'<a href="https://fedorahosted.org/suds/wiki/Documentation#PERFORMANCE">excellent caching feature</a>。必须显式创建缓存对象,然后使用<code>cache</code>参数将其传递给构造函数。否则它默认为<code>ObjectCache</code>,持续时间为1天。</p>
<p>您也可以考虑使用这两种方法。</p>