Tôi cần chuyển đối tượng tùy chỉnh đến một dịch vụ web từ xa. Tôi đã đọc rằng nó có thể là cần thiết để thực hiện ISerializable, nhưng tôi đã làm điều đó và tôi gặp khó khăn. Cách thích hợp trong C# để truyền một đối tượng tùy chỉnh cho một phương thức dịch vụ web là gì?C# .NET Web Services - Truyền các đối tượng tùy chỉnh đến một dịch vụ web
Trả lời
Đối tượng mà bạn cung cấp như các đối số là một phần của yêu cầu dịch vụ phải được đánh dấu với [Serializable] và dựa trên một số các câu trả lời đã đăng trước tôi, bạn cũng cần đảm bảo đối tượng tùy chỉnh của bạn không chứa bất kỳ tham số nào trong hàm tạo.
Cũng nên nhớ bất kỳ logic nào bạn có bên trong lớp học sẽ không được tạo trong lớp proxy được tạo ở phía máy khách. Tất cả những gì bạn thấy ở phía máy khách là một hàm tạo và các thuộc tính mặc định. Vì vậy, nếu bạn thêm các phương thức cho các đối tượng tùy chỉnh của mình, hãy nhớ rằng máy khách sẽ không nhìn thấy chúng hoặc có thể sử dụng chúng.
Điều tương tự cũng xảy ra đối với bất kỳ logic nào bạn có thể đưa vào bất kỳ thuộc tính nào.
Ví dụ
[Serializable]
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
Jim, xin lỗi, nhưng [Serializable] không liên quan gì đến các dịch vụ web. –
@John: Tại sao không?Không phải XmlSerializer cũng dựa vào thuộc tính [Serializable]? – fretje
Đã thêm ví dụ. Tôi sử dụng các [Serializable] thuộc tính tất cả các thời gian khi cần phải có một đối tượng tùy chỉnh được serialized. –
Chỉnh sửa: đã xóa phần về [Serializable]
Bạn đang tạo dịch vụ hoặc tiêu thụ?
Để tạo một đối tượng có thể được chuyển thành tham số của một webmethod, bạn không phải làm bất cứ điều gì đặc biệt. Đó là nếu bạn đang tạo một dịch vụ web asmx.
OTOH, Nếu bạn đang tạo dịch vụ WCF thì bạn phải đánh dấu lớp đó bằng [DataContract] và tất cả các thành viên bạn muốn được tuần tự hóa với [DataMember].
Nếu bạn đang sử dụng dịch vụ web, thì các lớp proxy cho đối tượng cần truyền sẽ được tạo khi bạn thêm tham chiếu dịch vụ. Bạn chỉ cần sử dụng chúng.
Thực ra tôi đang làm và tiêu thụ. Những gì bạn đã đề cập ở đây là những gì tôi đã làm, nhưng tôi tiếp tục nhận được khiếu nại từ VS về việc cần một constructor parameterless trong đối tượng tùy chỉnh (mà tôi đã thêm vào, nhưng vô ích.). –
sau đó bạn có thể cung cấp mã có liên quan và chính xác * khiếu nại * ;-) – fretje
Trông giống như một bản sao này question
Dù sao, tất cả các đối tượng tham gia vào tương tác WS nên XML-serializable, không ISerializable (đó là nhị phân serialization). Hơn nữa, chúng nên được mô tả trong hợp đồng dịch vụ (WSDL), nếu không khách hàng sẽ không thể tiêu thụ chúng. This article sẽ hữu ích khi hiểu tuần tự hóa XML với Dịch vụ web XML.
Tuy nhiên, nếu bạn đang nói về thực sự tùy chỉnh đối tượng (ví dụ: bất kỳ loại nào). Bạn nên xem xét chuyển chúng ở dạng nhị phân: hoặc dưới dạng mã hóa base64 hoặc dưới dạng tệp đính kèm. Câu hỏi tôi liên kết đến có một câu trả lời làm thế nào để làm điều đó.
Nhìn vào question này để xem làm thế nào để thực hiện serialization XML cho các đối tượng tùy chỉnh của bạn
- 1. Xử lý ngoại lệ tùy chỉnh - java Web Services
- 2. Truyền các đối tượng tùy chỉnh từ servlet đến JSP
- 3. Máy chủ truyền thống C# với Dịch vụ web WCF
- 4. Dịch vụ WCF: Trả lại các đối tượng tùy chỉnh
- 5. Powershell, dịch vụ web và loại đối tượng
- 6. Bắt ngoại lệ tùy chỉnh từ Dịch vụ web ASMX
- 7. . Dịch vụ web net trả về các đối tượng NULL ở đầu dữ liệu
- 8. Dịch vụ Web .NET (asmx) Timeout Problem
- 9. . Net Tiêu thụ Dịch vụ Web: Các loại giống nhau trong hai dịch vụ khác nhau
- 10. Dịch vụ Web .NET & Chủ đề nềnWorker
- 11. Chuyển hướng/Chuyển tiếp các yêu cầu dịch vụ Web SOAP đến một dịch vụ web khác
- 12. Mã hóa trong C# Web-Services
- 13. Restful vs Other Web Services
- 14. Tiêu thụ các dịch vụ web JSON-RPC trong .NET
- 15. Dịch vụ Web ASP.NET ở đâu trong .Net Framework 4.0?
- 16. Dịch vụ WCF thay vì Dịch vụ Web ASMX?
- 17. Cách thêm Tiêu đề Http tùy chỉnh cho Dịch vụ Web C# Khách hàng tiêu thụ dịch vụ Web 1.4 Axis
- 18. Gọi phương thức web từ cùng một dịch vụ web
- 19. Truy cập các mục Sitecore qua dịch vụ web .NET
- 20. Một dịch vụ web lớn hoặc nhiều dịch vụ web nhỏ?
- 21. Cách gọi một dịch vụ web .NET từ Android?
- 22. Eclipse: Tùy chọn dịch vụ web bị thiếu
- 23. Gọi dịch vụ web từ C++
- 24. Làm cách nào để gửi thông tin tới một dịch vụ web bằng C# bằng .NET?
- 25. C# ping một trang web? (dịch vụ giữ trẻ)
- 26. Thêm SOAPHeader tùy chỉnh vào C# cho cuộc gọi dịch vụ web
- 27. Lọc một NSArray chứa tùy chỉnh các đối tượng
- 28. Tiêu thụ dữ liệu xml qua Dịch vụ Web C#
- 29. api web Azure Services Mobile VS
- 30. Dịch vụ web và ứng dụng web
Nó có thể là tốt hơn nếu bạn có thể được cụ thể về những khó khăn bạn đang gặp phải. Bạn đang cố gắng làm gì? Có lẽ một số ví dụ cụ thể sẽ giúp ích. Những gì bạn có nghĩa là "vượt qua một đối tượng tùy chỉnh"? điều đó có thể có nghĩa là nhiều thứ. Một số chi tiết cụ thể sẽ giúp ích. – Cheeso