2013-02-21 10 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해야합니다. 내가 좋은 호스트 버전을 가리킨다면 브라우저에서 xsd를 열 수 있습니다 - 분명히 나쁜 호스트가 작동하지 않습니다.

잘못된 엔드 포인트를 올바른 엔드 포인트로 바꿀 수있는 방법이 있습니까?

+0

내가 hackish 한 방식으로이 작업을 수행하는 동안 .. 로컬 wsdl 파일을 읽고 쿼리 문자열을 기반으로 URL을 바꿀 프록시 스크립트가있었습니다. 더 우아한 것도보고 싶습니다. – jordanm

+0

@jordanm, 나는 Flask와 같은 일을한다고 생각했다. 더 쉬워졌습니다. 자기 답을보십시오! –

답변

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) 

그리고 그것은 라 불리는 : 이것은 쉬운 일입니다

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

걸리는 전부 그!

관련 문제