Thắc mắc về SOAP Request

Chào mọi người, em không rành về c#. Nay e có task về C# mong mọi người giúp đỡ em.

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://dummyurl.com/", RequestNamespace = "http://dummyurl.com/", ResponseNamespace = "http://dummyurl.com/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public string GetStatus(string Username, string Password, string EndSystemUser) {
    object[] results = this.Invoke("GetStatus", new object[] {
                Username,
                Password,
                EndSystemUser});
    return ((string)(results[0]));
}

Đây là 1 đoạn code trên StackOverFlow (https://stackoverflow.com/questions/54405357/can-anyone-tell-me-what-soapdocumentmethodattribute-does)
Em không biết cách thức gọi hàm của nó ngay chỗ “this.Invoke” rồi gọi 1 String GetStatus thì hàm này sẽ làm những gì? Luồng xử lý sẽ như thế nào
Em có thể chuyển code này thành js để viết dễ nhìn hơn được không? Nếu có cho em xin cách viết đó. Em xin cảm ơn

Kiến thức này không liên quan tới SOAP đâu cậu.

  • Method Invoke đó là 1 method cũng thuộc chung class chứa method GetStatus của cậu.
  • Class chứa 2 method kể trên đóng vai trò là proxy (Cậu nên tham khảo Proxy design pattern để hiểu concept này), với nhiệm vụ:
    • nhận request từ client (mấy cái này C# annotation đã giúp cậu)
    • parse nó ra object (mấy cái này C# annotation đã giúp cậu)
    • log thông tin quan trọng, hoặc cache response trả về, hoặc khởi tạo 1 resource nào đó (method Invoke làm)
    • gọi tới object của class chứa business logic thực hiện (cũng method Invoke).
  • Method Invoke nhận vào:
    • Tên 1 method khác ở class chứa business logic mà cậu cần gọi (dưới dạng string)
    • Các parameter mà method ở class chứa business logic kia cần
    • Method Invoke sẽ dùng 1 kỹ thuật gọi là reflection để gọi tới method ở class chứa business logic kể trên. Cậu nên đọc về reflection để hiểu thêm chi tiết.

Tớ sẽ chèn 1 cái hình minh họa vào đây khi tớ online trên máy tính

Với những thông tin trên, cậu hoàn toàn có thể tự viết lại code js tương ứng mà cậu muốn nhé! :smile:

Hope it helps!

5 Likes

Theo e đọc và hiểu thì proxy sẽ chạy xử lý trước hoặc sau khi gọi logic class. V có nghĩa là cái request e gửi từ client lên sẽ đi qua đây và có thể bị biến đổi. Xong sau đó nó sẽ được đẩy tiếp cho lớp business logic để xử lý tiếp.
Cái annotation soap làm nhiệm vụ là gì v anh?
E có thể tìm lớp business logic được không?
Vì mục đích cuối cùng của e là gọi API để nhận kết quả tương tự như code luồng c# đã được viết trước đó.

Ầy!

Cậu hiểu đúng phần này rồi. Good job :+1:!

Về lý thuyết, cậu có thể sửa request hoặc response. Nhưng không ai làm vậy trong proxy cả, vì đó là nguồn gốc tội lỗi :sweat_smile:
Thường thì người ta chỉ làm mấy việc này trong proxy:

  • Log request/response (không sửa gì request và response)
  • Cache response trả về (không sửa gì request và response)
  • Khởi tạo/hủy bỏ 1 resource nào đó tốn kém mà business logic không cần quan tâm (không sửa request và response)

Nếu cậu phát hiện ai đó sửa request/response trong class đóng vai trò proxy, việc cậu cần làm là mở git blame, gửi email cho boss của người viết ra nó, nhờ ổng giảm lương của tay viết ra nó hộ vì hắn xứng đáng bị đuổi :sweat_smile:
Vậy nên, yên tâm là không ai làm vậy nha! :sweat_smile: Nhất là khi họ đã mất công implement proxy pattern như vậy.

He he, đó chính là câu hỏi stackoverflow mà cậu ném cho bọn tớ đó. Cậu đọc câu trả lời ở đó xem.

Dĩ nhiên là được, nếu cậu có code của method Invoke đó. Mà code trên Stackoverflow đó đâu phải của cậu ha :sweat_smile:

Hm. Tớ tò mò cái, cậu thực sự gặp vấn đề gì thế? Vì nếu cậu cần gọi API, và cậu đã có code của API đó, thì cậu nên biết được cách gọi API đó rồi chứ?

3 Likes

Code này của người ta e chỉ chuyển nó sang dạng call API á anh.

1 Like

Em đã làm được rồi. Tuy là có 1 số phần c# e còn khó hiểu, nhưng em đã hoàn thành mục tiêu mình đề ra và tiếp thu được khá nhiều kiến thức mới. Cảm ơn mọi người rất là nhiều.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?