2011-11-05 24 views
5

Tôi đã xác định loại sau trong dự án thư viện lớp học.Loại bộ sưu tập tùy chỉnh không được sử dụng lại trên máy khách WCF Vấn đề bên proxy

[CollectionDataContract()] 
    public class OperationException:System.Collections.Generic.Dictionary<string,ExceptionData> 
    { 
     [DataMember()] 
     public bool ExceptionExists { get; set; } 
    } 

    [DataContract()] 
    public class ExceptionData {[DataMember()] public string Msg;} 

Khi kết thúc dịch vụ WCF, tôi trả về một đối tượng có chứa lớp ở trên làm biến số thành viên như thế này.

[DataContract()] 
public class SaveClient 
{ 
    [DataMember()] 
    public string Id; 
    [DataMember()] 
    public OperationException ExceptionCollection; 
} 

Tôi có thư viện lớp OperationException được tham chiếu ở phía máy khách. Vấn đề là khi tôi tạo proxy bằng Add Service Reference, một định nghĩa mới về OperationException của kiểu dictionary được tạo ra. Tôi có tùy chọn Reuse Types được đặt thành true. Tôi thích có loại Actual 'OperationException' đang được sử dụng vì tôi phải truyền đối tượng này cho các phương thức khác.

Thanks in Advance ..!

Iftikhar.

Trả lời

1

Tổ hợp proxy máy khách của bạn có tham chiếu dự án tới thư viện lớp mà loại được thêm vào không?

Nếu proxy được tạo ra bởi svcutil không phải là những gì bạn muốn, nó cũng rất dễ dàng để viết chúng bằng tay. Chỉ cần tạo lớp ClientBase có nguồn gốc của riêng bạn và thực hiện giao diện dịch vụ của bạn trên đó. Sau đó, bạn có quyền kiểm soát các loại lắp ráp bạn muốn sử dụng lại.

+0

Có, tôi có tham chiếu được thêm vào thư viện lớp 'OperationException'. Tôi có thể cố gắng đi các tuyến đường proxy tùy chỉnh, nhưng bạn có biết bất kỳ vấn đề trong mã trên có thể gây ra hành vi bất ngờ. –

3

Tôi đã gặp vấn đề tương tự và giống như bạn đã áp dụng thuộc tính CollectionDataContract và yêu cầu trình tạo proxy sử dụng lại các loại từ bản được chia sẻ của tôi.

Khắc phục không rõ ràng, bạn cần cung cấp móc trong tệp Reference.svcmap trên máy khách của mình để yêu cầu trình tạo sử dụng loại bộ sưu tập tùy chỉnh của bạn.

Trong Reference.svcmap chỉnh sửa các yếu tố CollectionMappings như sau và sau đó cập nhật các tài liệu tham khảo dịch vụ:

<CollectionMappings> 
    <CollectionMapping TypeName="YourSharedAssemblyNamespace.OperationException" Category="List" /> 
</CollectionMappings> 

Tôi nghĩ rằng mục tiêu tương tự có thể đạt được nếu bạn đang sử dụng svcutil từ dòng lệnh bằng cách cung cấp các loại bộ sưu tập tranh luận.

/collectionType:YourSharedAssemblyNamespace.OperationException 

Xem các bài viết để biết thêm:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/09eefbbc-bf63-4aa3-a0cb-01a9dbd7f496/

http://www.codeproject.com/KB/WCF/WCFCollectionTypeSharing.aspx

Tôi không chắc chắn lý do tại sao các máy phát điện Proxy WCF không chỉ sử dụng nó là lẽ thường để tìm ra bộ sưu tập chia sẻ các loại, nhưng có bạn đi, phấn nó lên như một funny từ thiết kế công cụ WCF.

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