2012-06-01 42 views
6

này được dịch vụ của tôi tạo ra lớp:Override trong dịch vụ WCF

public partial class MyClass : object, 
           System.Runtime.Serialization.IExtensibleDataObject, 
           System.ComponentModel.INotifyPropertyChanged 
{ } 

Tôi đang sử dụng dịch vụ của riêng tôi. Trong MyClass Tôi đã ghi đè ToString() nhưng tôi không có nó trong ứng dụng của mình. Tôi muốn hoặc là để tạo ra nó hoặc là MyClass là một phần tôi có thể ghi đè lên ToString bản thân mình?

Tôi biết rằng tôi có thể ghi trong tệp .cs được tạo. Cách tốt nhất để làm điều đó là gì và tôi nên làm gì?

+2

WCF sẽ tạo lớp proxy phía máy khách có cùng ** chữ ký ** khi được tuần tự hóa/deserialized - nhưng điều đó ** NOT ** "tuyên truyền" bất kỳ phương thức nào (chỉ đúng dữ liệu - thuộc tính công khai của lớp học)) từ máy chủ đến máy khách. –

+2

tha tôi thấy nhưng làm thế nào để đạt được mục tiêu của tôi? – levi

Trả lời

6

Nếu bạn định nghĩa cả ứng dụng khách và dịch vụ, bạn không cần sử dụng các lớp tạo WSDL. Di chuyển các đối tượng được chia sẻ vào một assembly riêng biệt và tham chiếu nó từ cả các dự án máy khách và máy chủ. Khi bạn tạo tham chiếu dịch vụ, có một tùy chọn "nâng cao" (mà tôi nghĩ là bật theo mặc định) để sử dụng lại bất kỳ lớp đã biết nào từ WSDL thay vì tạo các lớp mới. Thậm chí tốt hơn, nếu bạn chuyển hợp đồng dịch vụ sang thư viện được chia sẻ, bạn thậm chí không cần tạo tham chiếu dịch vụ, bạn có thể gọi trực tiếp số ChannelFactory và loại bỏ toàn bộ lớp proxy được tạo tự động.

Tôi có một cuộc biểu tình về cách làm cả những điều này trên blog của tôi: http://blog.kutulu.org/2012/03/proxy-free-wcf-ditching-proxy.html

Nếu bạn hoàn toàn cần sử dụng WSDL từ dịch vụ (ví dụ như bạn không có quyền kiểm soát phía dịch vụ và nó có thể thay đổi về bạn), sau đó bạn có thể mở rộng các lớp học mà VS tạo ra (như bạn đã đề xuất). Hầu hết các lớp tự động tạo ra bạn nhận được từ VS những ngày này là các lớp một phần đặc biệt để làm cho loại mở rộng này có thể. Nhược điểm, tất nhiên, là không có gì đảm bảo các phương thức lớp học bổ sung của máy khách và máy chủ là giống nhau. Tôi chắc chắn sẽ xem xét lựa chọn cuối cùng này.

+0

u có thể giải thích cho tôi ngay tại sao dịch vụ đó tạo ra một phần không? lý do gì? – levi

+0

Hầu hết mọi thứ VS2010 tạo ra tự động là các lớp học một phần, vì vậy bạn có thể mở rộng chúng khi cần thiết. –

3

Nếu bạn chia sẻ dll, nơi phương pháp overriden exixts giữa dự án khách hàng và máy chủ, bạn có thể sử dụng phương pháp. Theo mặc định, WCF tạo ra mỗi lớp chỉ với các thuộc tính được khai báo trong giao diện dịch vụ. Không có phương thức nào được tạo.

Bạn chỉ có thể tạo tệp dll riêng biệt và đặt những gì bạn muốn chia sẻ giữa dịch vụ và ứng dụng khách vào dll này; và thêm dll này làm tham chiếu cho cả dự án khách hàng và dịch vụ. Theo mặc định, khi bạn tạo proxy, nó sẽ không tự động tạo các lớp được chia sẻ.