2010-07-26 30 views
10

Tôi có một WSDL SOAP (được tìm thấy ở đây: https://portal.bsh-partner.com/picenter/server/a2a/) và tôi đang cố gắng sử dụng các dịch vụ web.Tiêu thụ dịch vụ web SOAP trong ASP.NET

var soapEnvelope = string.Empty; 
soapEnvelope = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; 
soapEnvelope += "<soapenv:Envelope xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:q0=\"http://thexmlhost.com\">"; 
soapEnvelope += "<q0:Connect>"; 
soapEnvelope += "<q0:Username>username</q0:Username>"; 
soapEnvelope += "<q0:Password>password</q0:Password>"; 
soapEnvelope += "</q0:Connect>"; 
soapEnvelope += "</soapenv:Body>"; 
soapEnvelope += "</soapenv:Envelope>"; 

var xmlHttp = new MSXML2.ServerXMLHTTP40(); 
xmlHttp.open("POST", "https://thexmlhost.com/", "", ""); 
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
xmlHttp.setRequestHeader("SOAPAction", "thexmlhost.com/"); 

xmlHttp.send(soapEnvelope); 

xmlHttp.waitForResponse(500); 

var outXml = xmlHttp.responseText; 

Phản hồi tiếp tục trả lại trang lỗi phản hồi HTTP chung. Bất kỳ ý tưởng làm thế nào tôi nên đi qua Soap Envelope của tôi để có được phản ứng thích hợp trở lại từ các dịch vụ web?

+3

Tại sao trên thế giới bạn lại chế tác một thông điệp xà phòng? –

+2

Idk nếu tôi nên upvote này bởi vì một ví dụ tuyệt vời của nó làm sai hoặc downvote nó cho cùng một lý do ... –

Trả lời

9

Tôi vừa nhận thấy rằng bạn đang sử dụng mã này ở phía máy chủ.


Đây không phải là cách để sử dụng dịch vụ web trong .NET. Sử dụng lệnh "Thêm dịch vụ tham khảo" trong Visual Studio để tạo các lớp proxy cho phép bạn dễ dàng tiêu thụ dịch vụ.

Xem How to Consume a Web Service để biết ví dụ, cũng như http://msdn.microsoft.com/wcf/.

Ngoài ra, không bao giờ sử dụng kỹ thuật thao tác chuỗi khi làm việc với XML. Tóm lại, các quy tắc cho chuỗi và cho XML là khác nhau. .NET có một số API XML để làm việc với XML và tất cả chúng đều biết các quy tắc.

+0

Bạn đã có ý nghĩa gì bởi "Nó thường là tốt hơn để tiêu thụ một dịch vụ SOAP từ phía máy chủ. . " ? –

+0

@Allen: cho đến khi tôi nhận thấy "' string.Empty' ", tôi nghĩ đây là JavaScript. –

+0

ahhh có ý nghĩa –

3

Chỉ cần liếc nhìn mã của bạn, có vẻ như bạn quên để thêm cơ thể bắt đầu tag của bạn: <soapenv:Body>

Trừ khi bạn có một lý do cụ thể được xây dựng thông điệp của bạn bằng tay, tôi sẽ khuyên bạn nên sử dụng một proxy được tạo ra bằng cách sử dụng Công cụ svcutil.exe đi kèm với visual studio 2008 hoặc mới hơn. (Công cụ này được sử dụng tự động bởi Visual Studio nếu bạn sử dụng tính năng "Thêm dịch vụ tham khảo"), giả sử rằng bạn không có vấn đề với việc sử dụng WCF để xử lý giao tiếp với dịch vụ web của bạn.

Ngoài ra, nếu vì lý do nào đó bạn không thể sử dụng WCF, chẳng hạn như nếu bạn đang phát triển trong .Net 2.0 với Visual Studio 2005, trong trường hợp này bạn sẽ không có tính năng "Thêm dịch vụ tham khảo" vẫn sử dụng tính năng "Thêm tham chiếu web" của Visual Studio để tạo proxy cho dịch vụ web của bạn. Tính năng này sử dụng công cụ wsdl.exe thay vì svcutil.exe.

Nếu không, nếu bạn thực sự phải tiếp tục với phương pháp xây dựng thông báo SOAP theo cách thủ công, thì ít nhất tôi khuyên bạn nên thêm một số đăng nhập vào ứng dụng của mình để bạn có thể dễ dàng phân tích thông báo được xây dựng khi có sự cố.

+0

(Đã xóa nhận xét trước của tôi do bị cho là không chính xác) Tôi đã chấp nhận quan điểm của bạn; tại thời điểm này WCF nên là phương pháp được khuyến nghị nếu có. Lưu ý rằng một số liên kết trên MSDN trong VS2010 ASP.NET Web Services (http://msdn.microsoft.com/en-us/library/yzbxwf53.aspx) đề cập cụ thể rằng chức năng "Tham khảo Web"/wsdl.exe là di sản và được cung cấp cho khả năng tương thích ngược. –

21

Nếu bạn có WSDL, bạn có thể tạo một tham chiếu dịch vụ trong Visual Studio và nó sẽ tạo ra một lớp proxy cho bạn. Trừ khi tôi thiếu một số điểm tốt trong câu hỏi của bạn, nó sẽ đáng tin cậy hơn nhiều, và dễ dàng hơn nhiều, để thực hiện và sử dụng.

Hy vọng điều đó sẽ hữu ích.

+2

Cuối cùng, một câu trả lời lành mạnh –

+1

-1 để đề xuất tham chiếu web. –

+0

@ John - bạn có thể xây dựng được không? Chỉnh sửa: chắc chắn bạn không có nghĩa là giả nhỏ của tôi không sử dụng thuật ngữ 'Dịch vụ tham khảo'? Tôi sẽ cập nhật đầy đủ và vẫn còn bối rối là tại sao mà làm cho nó một câu trả lời xấu .. –

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