2013-02-21 50 views
2

我正在尝试在反向代理/重定向背后托管的WCF服务。 WCF服务根据实际从哪台机器提供服务报告错误的schemaLocation。举例来说,我得到这样的:现在是否可以在Suds/python中替换模式位置?

<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。如果我将它指向goodhost版本,我可以在我的浏览器中打开xsd - 显然,badhost不起作用。

有没有一种方法可以用正确的替换这些不良端点?

+0

一段时间后,我以一种骇人的方式做到了这一点..我有一个代理脚本,它将读取本地wsdl文件并根据查询字符串替换网址。我希望看到更优雅的东西。 – jordanm 2013-02-21 20:09:19

+0

@jordanm,我想过和Flask一样做同样的事情。事实证明,这更容易 - 看到我的自我回答! – 2013-02-21 20:22:17

回答

2

原来人们可以创建plugins。这一个是容易的:

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]) 

这一切都需要!

相关问题