2

我正在尝试访问在反向代理/重定向后面托管的 WCF 服务。WCF 服务报告错误schemaLocation,具体取决于它实际上是从哪台机器提供服务的。例如,我得到这样的东西:

<wsdl:types>
<xsd:schema targetNamespace="http://tempuri.org/Imports">
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd0" namespace="http://tempuri.org/"/>
<xsd:import schemaLocation="http://badhost1.com/service.svc?xsd=xsd1" namespace="http://schemas.microsoft.com/2003/10/Serialization/"/>
</xsd:schema>
</wsdl:types>

现在,它不应该http://badhost1.com,它应该是http://goodhost.com。如果我将 xsd 指向 goodhost 版本,我可以在浏览器中打开它——显然 badhost 版本不起作用。

有没有办法用正确的端点替换这些坏端点?

4

1 回答 1

2

事实证明可以创建插件。这个很简单:

import re
from suds.plugin import DocumentPlugin

class FixUrls(DocumentPlugin):
    def loaded(self, context):
        context.document = re.sub(r'badhost\d', 'goodhost', context.document)

然后它被称为la:

client = Client(url, plugins=[plugin])

仅此而已!

于 2013-02-21T20:21:24.640 回答