c#
  • .net
  • soap
  • 2012-05-09 4370 views 9 likes 
    9

    Tôi cần gửi yêu cầu SOAP tới URL. Nhưng tôi thấy điều này khó hơn thì tôi nghĩ nó sẽ như thế.Gửi yêu cầu SOAP, bắt đầu từ đâu?

    Yêu cầu mà tôi phải gửi là:

    string bla = "" + 
    "<?xml version='\"1.0\" encoding=\"UTF-8\"?>" + 
        "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">" + 
         "<soap:Body>" + 
          "<ns1:sendNotificationResponse" + 
           "xmlns=\"http://notification.services.adyen.com\"" + 
           "xmlns:ns2=\"http://common.services.adyen.com\">" + 
          "<notificationResponse>[accepted]</notificationResponse>" + 
          "</sendNotificationResponse>" + 
         "</soap:Body>" + 
        "</soap:Envelope>"; 
    

    Tôi đã đưa ra một URL: https://ca-test.adyen.com/ca/services/Notification?wsdl

    Vấn đề là, đó là tôi không chắc chắn làm thế nào để đi từ đây . Tôi có thể chỉ cần gửi yêu cầu đến URL đó không? Hay tôi phải nhập WSDL bằng cách nào đó trước?

    Tôi đã tìm thấy rất nhiều ví dụ trên mạng, nhưng tôi thực sự không thể hiểu được hầu hết trong số chúng. Một số thậm chí còn lỗi thời, bởi vì họ vẫn đang sử dụng: Microsoft.Web.Services3

    Vì vậy, trong ngắn hạn, tôi không biết phải làm gì ở đây và làm thế nào. Tôi chỉ muốn gửi thông điệp 'SOAP' đó ...

    +3

    Bạn đã cố thêm 'Tham chiếu dịch vụ' hoặc' Tham chiếu web' vào VS của mình chưa? –

    +0

    Hãy thử liên kết này về cách tạo hoặc sử dụng dịch vụ web: http://www.kevingao.net/wcf-java-interop/wcf-client-and-wcf-service.html –

    +0

    @LB Không, đây là tất cả thực sự mới với tôi. Tôi thấy "Thêm tham chiếu dịch vụ" chứ không phải "Thêm tham chiếu web". Tôi sẽ cố gắng thêm "Tham khảo dịch vụ" trước. – Vivendi

    Trả lời

    4

    Bạn có thể thực hiện việc này bằng cách thêm tham chiếu dịch vụ vào URL điểm cuối mà bạn đã cung cấp trong câu hỏi. Sau đó, bạn có thể gọi phương thức web như bạn sẽ gọi một phương thức bình thường, chỉ cần tắt đối tượng khách hàng. Step-by-bước dưới đây:

    1. Kích chuột phải vào tài liệu tham khảo, chọn thêm tài liệu tham khảo phục vụ
    2. Nhập URL để thêm tài liệu tham khảo phục vụ
    3. Trong mã nhanh chóng khách hàng mới và sử dụng như sau:
    ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient(); 
    client.sendNotification(...); 
    

    Sửa

    Nhìn vào dịch vụ web chi tiết hơn, có vẻ như yêu cầu SOAP bạn đã đưa vào câu hỏi là phản hồi sẽ được gửi lại bởi url khi bạn đã gọi phương thức - không phải yêu cầu bạn sẽ gửi đến dịch vụ web để gọi phương thức.

    3

    Sẽ không dễ dàng hơn khi thêm tham chiếu dịch vụ web trong Visual Studio? Những gì bạn nhận được là các lớp "sơ khai" cho phép bạn giao tiếp với dịch vụ web bằng cách sử dụng các lớp và phương thức bình thường - bạn không cần phải quan tâm đến các thông điệp SOAP được gửi đi hoặc không có gì.

    Để thêm tham chiếu như vậy, bạn có thể chọn mục menu ngữ cảnh "Thêm tham chiếu dịch vụ". Tùy thuộc vào loại dịch vụ, bạn sẽ cần phải nhấn nút ở phía dưới bên trái của hộp thoại tham chiếu dịch vụ (bằng tiếng Đức này được gọi là "Erweitert", sẽ dịch thành "Nâng cao" hoặc "Mở rộng"). Hộp thoại tiếp theo cũng có nút ở phía dưới bên trái trong phần "Tương thích" để thêm "tham chiếu dịch vụ web kiểu .NET 2.0".

    Một trong hai sẽ giúp bạn.

    Nếu bạn cần gửi yêu cầu theo cách thủ công, bạn sẽ gửi yêu cầu POST tới URL của dịch vụ web thêm mã XML làm nội dung yêu cầu.

    +0

    Tôi đã thêm WSDL làm tài liệu tham khảo. Nó cho tôi thấy trong hộp thoại tôi có một chức năng 'sendNotification'. Tôi đoán đó là những gì tôi cần. Bây giờ tôi có "ServiceReference1" trong "Tham khảo dịch vụ". Tôi đoán đó là tốt phải không? --- Điều tiếp theo tôi phải làm là sử dụng nó. Bất kỳ ý tưởng làm thế nào tôi có thể làm điều đó? --- ServiceReference1 service = new ServiceReference1(); --- Đừng làm trò lừa. – Vivendi

    +0

    Bây giờ sẽ có một không gian tên 'ServiceReference1'. Vì vậy, nếu bạn nhập 'ServiceReference1.' và chờ cho cửa sổ bật lên hoàn thành mã xuất hiện, bạn sẽ thấy một số lớp. Một trong những bạn cần phải kết thúc với "Khách hàng". Ví dụ: "Service1Client". –

    +0

    Khi Richard phát hiện ra, dòng này phải là 'ServiceReference1.NotificationPortTypeClient client = new ServiceReference1.NotificationPortTypeClient()' –

    0

    Về "cách gửi tin nhắn xà phòng": Phụ thuộc của procotol được sử dụng (http, jms, thậm chí smtp), thông điệp SOAP có thể được gửi cho instane ngay cả từ dòng lệnh, qua telnet, curl, v.v.

    Vì vậy, liên quan đến câu hỏi của bạn: Xin lỗi vì câu trả lời chung chung, nhưng nó phụ thuộc vào khung công tác được sử dụng.

    Về WSDL: WSDL hoạt động như hợp đồng/cơ sở để thực hiện, vì vậy trong trường hợp của bạn (giả sử rằng thông báo SOAP của bạn đã hợp lệ theo lược đồ trong WSDL), việc sử dụng WSDL không rõ ràng vô cùng cần thiết.

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