2010-01-14 28 views
6

Có ai biết về hướng dẫn SUDS tốt hay không. Tôi đang cố gắng chạy thử nghiệm trên các tập tin WSDL và tôi gặp khó khăn trong việc tìm kiếm bất kỳ thông tin về làm thế nào để làm điều này. SUDS có khác nhiều so với SOAPy và có ai khuyên bạn nên chạy thử nghiệm khói trên các hàm được lưu trữ trong các tệp WSDL hay không.Sử dụng SUDS để kiểm tra WSDL

Tôi đã đọc rằng SOAPAy không còn được hỗ trợ trong Python 2.6+. Điều này có đúng không?

Tôi có một tập tin WSDL tôi đã nhập:

from suds.client import Client 

client = Client('http://10.51.54.50/ptz.wsdl') 

client.service.GetNode() 

Tôi đã nhận lỗi này:

in open 
    response = self._open(req, data) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 407, in _open 
    '_open', req) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 367, in _call_chain 
    result = func(*args) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1146, in http_open 
    return self.do_open(httplib.HTTPConnection, req) 
    File "/home/build/workspace/downloads/Python-2.6.4/Lib/urllib2.py", line 1121, in do_open 
    raise URLError(err) 
urllib2.URLError: <urlopen error [Errno 111] Connection refused> 

Có ai biết tại sao điều này đang xảy ra?

Tôi có thể kết nối với tệp này thông qua trình duyệt của mình. Tôi đã cài đặt tất cả các gói suds. Có yêu cầu thiết lập nào khác không?

+0

'lỗi urlopen [Errno 111] Kết nối refused' vẻ như bạn không được phép truy cập vào IP. –

+0

Không, thiết lập bổ sung là không cần thiết. –

+0

bạn có thể phát triển khuôn khổ thử nghiệm dựa trên xà phòng không? nếu vậy, kết quả của bạn có định dạng XML kiểu junit không? – kamal

Trả lời

15

Suds rất dễ sử dụng.

from suds.client import Client 

client = Client("http://example.com/foo.wsdl") 
client.service.someMethod(someParameter) 

someMethod là tên của phương thức như được mô tả trong WSDL.

2

Kết nối bị từ chối cho biết máy chủ không có ở đó. Bạn có thể truy cập http://10.51.54.50/ptz.wsdl trong trình duyệt hoặc qua curl không? Nếu không, hãy bắt đầu bằng cách chạy dịch vụ SOAP trước rồi thử lại.

2

Trong trường hợp của tôi, đó là một sai lầm ngu ngốc (giống như bất kỳ lỗi nào khác).

URL mà tôi đã sử dụng để khởi dịch vụ của tôi là một cái gì đó giống như

Uri httpUri = new Uri("http://localhost:8000/CalculatorService"); 

tôi có thể truy cập vào dịch vụ này từ một khách hàng python chạy trên cùng một máy như dịch vụ. Tôi có thể trình duyệt wsdl từ trình duyệt cả cục bộ lẫn từ máy từ xa. Tuy nhiên khi tôi cố gắng truy cập dịch vụ này từ một máy từ xa, tôi đã nhận lỗi kết nối bị từ chối. Điều kỳ lạ là trong wireshark, tôi có thể thấy rằng dịch vụ gửi lại wsdl cho máy khách từ xa. Sau lãng phí một vài giờ, tôi bật ghi nhật ký

logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG) 
logging.getLogger('suds.wsdl').setLevel(logging.DEBUG) 

Các bản ghi cho thấy bọt tải về các wsdl từ máy chủ nhưng sau đó nó đã cố gắng để kết nối với localhost: 8000. Và điều đó giải thích kết nối từ chối lỗi. Tôi chỉ thay đổi URI trên máy chủ WCF để

Uri httpUri = new Uri("http://192.168.0.1:8000/CalculatorService"); 

Và đó giải quyết vấn đề của tôi

Các vấn đề liên quan