2010-03-26 26 views
11

Trong servce web tôi nóiTại sao dịch vụ WCF của tôi trở lại và ARRAY thay vì một Danh sách <T>?

public List<Customer> GetCustomers() 
    { 
     PR1Entities dc = new PR1Entities(); 
     var q = (from x in dc.Customers 
       select x).ToList(); 
     return q; 
    } 

(khách hàng là một đối tượng thực thể)

Sau đó, tôi tạo ra các proxy khi tôi thêm các dịch vụ .. và trong reference.cd nó nói

public wcf1.ServiceReference1.Customer[] GetCustomers() { 
     return base.Channel.GetCustomers(); 
    } 

TẠI SAO NÓ LÀ MỘT CÁCH NÀO? Tôi đã yêu cầu một Danh sách.

trợ giúp.

Trả lời

26

Nhấp chuột phải vào tham chiếu dịch vụ và chọn Định cấu hình tham chiếu dịch vụ.

Trong trình đơn Loại bộ sưu tập thả xuống, hãy chọn loại System.Collections.Generic.List.

Tôi tin rằng lý do mặc định là Array là nó tương thích nhất khi tuần tự hóa. Nếu bạn đang sử dụng dịch vụ từ một thứ gì đó nhận ra thứ phức tạp hơn, bạn có thể cấu hình như tôi đã đề cập.

+0

Thú vị. Những điều làm việc chính xác giống nhau khi sử dụng Silverlight thay vì ASP.NET? – punkouter

+0

Tôi không chắc chắn ý của bạn là chính xác như nhau, nhưng tôi đã có thể định cấu hình đầy đủ loại truyền này trong Silverlight mà không gặp vấn đề gì. Theo mặc định, Silverlight sẽ chuyển đổi mảng thành ObservableCollections để tận dụng khả năng ràng buộc nâng cao. Tóm lại, tôi tin rằng câu trả lời bạn đang tìm kiếm là có! –

1

Vì đó là cách sắp xếp danh sách. Lớp Customer của bạn ở phía máy khách đã được tạo từ siêu dữ liệu dịch vụ, mô tả hiệu quả cách siêu dữ liệu được tuần tự hóa không phải cách nó được xác định ban đầu. Nếu lớp học ban đầu của bạn là Customer, bạn có thể chỉ định sử dụng lại nó trong mã máy khách khi bạn tạo tham chiếu dịch vụ và sau đó nó sẽ đến như là một List<T>.

3

Nhấp chuột phải vào tham chiếu dịch vụ của bạn -> Định cấu hình tham chiếu dịch vụ -> Trong "Loại dữ liệu" thay đổi "Loại bộ sưu tập" thành System.Collections.ArrayList hoặc bất kỳ loại nào bạn muốn mảng để deserialize như.

Danh sách của bạn được tuần tự hóa thành một mảng (phía máy chủ). Bạn chọn cách để deserialize nó (phía khách hàng).

2

Tôi đã đặt thành System.Collections.Generic.List, nhưng đột nhiên khi tôi thực hiện Cập nhật dịch vụ cập nhật, proxy được tạo của tôi sẽ trả về các loại mảng! có chuyện gì thế?

+0

Bạn đã giải quyết được sự cố chưa? Tôi đang trong tình trạng tương tự. –

+0

Tôi cũng gặp vấn đề này. Nó chắc chắn được đặt thành Generic.List. =/ – JHubbard80

+0

Tôi gặp vấn đề tương tự. Giải quyết mỏ ở đây: http://stackoverflow.com/questions/16657982/wcf-returns-arrayofkeyvalueofintstringkeyvalueofintstring-instead-of-dictionar –

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