2014-09-16 11 views
8

Tôi đang làm việc trên hệ thống quản lý đại học mà tôi đang sử dụng dịch vụ WCF và trong dịch vụ tôi đang sử dụng DataTables và DataSets để lấy dữ liệu từ cơ sở dữ liệu và cơ sở dữ liệu là máy chủ sql.Tại sao trả lại tập dữ liệu hoặc bảng dữ liệu từ dịch vụ WCF không phải là một thực hành tốt? Các lựa chọn thay thế là gì?

Câu hỏi của tôi là

  • Đang sử dụng DataTables và Datasets "Good Practice" hoặc "Thực hành Bad"?
  • Nếu nó xấu, thay thế DataTable/DataSet là gì?
  • Nếu không tốt, lý do chính là gì?
+4

[Trở DataSets từ WebServices là đẻ trứng của Satan và Đại diện cho tất cả những gì thật ác trong thế giới] (http : //www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx) Bằng SCOTT HANSELMAN – Habib

+0

Bạn đang sử dụng chúng * trong * dịch vụ hoặc * bên ngoài * bằng cách trả lại chúng? – nvoigt

+0

Trách nhiệm của dịch vụ bạn đang xây dựng là gì, bạn có biết (và có quyền kiểm soát) đối với khách hàng không? – Jocke

Trả lời

10

Bộ dữ liệu trả về từ dịch vụ web thường không được coi là "thực hành tốt". Những vấn đề đã được ghi nhận triệt để trong các liên kết sau đây:

http://msdn.microsoft.com/en-us/magazine/cc163751.aspx
http://www.4guysfromrolla.com/articles/051805-1.aspx
http://msdn.microsoft.com/en-us/magazine/cc188755.aspx

Nói tóm lại, những vấn đề lớn nhất với trở DataSet các đối tượng từ các dịch vụ web dường như liên quan đến hiệu suất serialization, khả năng tương tác non-.net . Ngoài ra, bản chất chung, đa hình của cấu trúc dữ liệu chung cho đến khi thời gian chạy là DataSet, như vậy, định nghĩa WSDL không cung cấp mô tả đầy đủ về chữ ký phương thức. Tuy nhiên, với bất kỳ quyết định thiết kế nào, bạn cần cân nhắc chi phí so với lợi ích và xác định mức độ phù hợp nhất với các mục tiêu và ràng buộc cụ thể của bạn.

Về phương án thay thế, bạn có thể xem xét sử dụng bộ sưu tập chung (ví dụ: List<yourClassHere>) hoặc thậm chí có thể xem xét một số sửa đổi kiến ​​trúc để cho phép sử dụng ODATA.

Các liên kết sau cung cấp một số tham khảo nền tảng tốt cho các thực thể trả lại thông qua dịch vụ web. http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-14.aspx http://www.codeproject.com/Articles/127395/Implementing-a-WCF-Service-with-Entity-Framework http://msdn.microsoft.com/en-us/data/hh237663.aspx

+1

+1 nhưng vui lòng cung cấp tổng quan ngắn gọn về những gì trong các liên kết đó. –

+0

Bạn có thể cung cấp cho tôi một số ví dụ về Bộ sưu tập hoặc bất kỳ liên kết nào không ?? –

+0

@Seymour: Sử dụng DataSet/DataTable khả năng tương tác của dịch vụ WCF khác sau đó .Net Platform sẽ vẫn tồn tại hay không? –

1

Có 3 lý do cho thất bại kiểu trả về như datatable trong các dịch vụ WCF

  • Bạn cần phải xác định dữ liệu tên bảng như:

    MyTable=new DataTable("tableName"); 
    
  • Khi bạn đang ở thêm tài liệu tham khảo về phía khách hàng của dịch vụ WCF chọn dll tái sử dụng system.data

  • Specify thuộc tính trên datatable biến thành viên như

    [DataMember] 
    public DataTable MyTable{ get; set; } 
    
-1

Tôi đang sử dụng DataTable trong ứng dụng WCF của tôi, nhưng đã nhận được một lỗi. Đây là cách tôi sửa lỗi.

Khi trả về một DataTable từ dịch vụ web trong WCF cho ứng dụng biểu mẫu cửa sổ. Tôi đã nhận được ngoại lệ này.

System.ServiceModel.CommunicationException: 'Đã xảy ra lỗi khi nhận phản hồi HTTP tới http://localhost:52968/MunerahService1.svc. Điều này có thể là do ràng buộc điểm cuối dịch vụ không sử dụng giao thức HTTP. Điều này cũng có thể là do bối cảnh yêu cầu HTTP bị máy chủ hủy bỏ (có thể do việc tắt dịch vụ). Xem nhật ký máy chủ để biết thêm chi tiết. '

Nó xảy ra bất cứ lúc nào tôi đã cố gắng để lấy một DataTable

Để khắc phục ngoại trừ tôi cần thiết để cung cấp cho các DataTable một cái tên.

mã với các lỗi

tab = new DataTable(); 

Sửa code để loại bỏ các excption

tab = new DataTable("Doctor_info"); 
+0

Điều này không thực sự trả lời được câu hỏi gốc hay không? – pirho

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