2010-07-26 42 views
6

Kịch bản:Thêm WCF Service Reference không tạo mã

  • dự án trang web thuộc NET 3,5
  • Visual Studio 2010
  • Dịch vụ WCF tham khảo

Sự cố:
Tôi đang cố gắng mở rộng một lớp được đánh dấu bằng thuộc tính DataContract. Tôi mặc dù các lớp học được tạo ra đã được tuyên bố partial, vì vậy mà tôi có thể dễ dàng mở rộng nó. Tôi đã thử khai báo một lớp từng phần trong cùng một không gian tên có cùng tên, nhưng nó dường như không nhận ra lớp nào nó đang mở rộng. Tôi đã thử xác định vị trí các tập tin mã được tạo ra (Reference.cs) mà tôi nghĩ tồn tại sau khi đọc này article bên trong thư mục tham khảo, nhưng nó không có ở đó. Khi cố gắng điều hướng đến định nghĩa của lớp, tôi phát hiện ra nó nằm trong một thư viện được biên dịch và vấn đề lớn nhất là nó không được khai báo là một phần.
Câu hỏi:
Sự khác biệt này có liên quan đến việc tôi đang sử dụng trang web chứ không phải một dự án web không? Nếu vậy, có cách nào mà tôi có thể làm cho các máy phát điện mã (mà cũng có vẻ để biên dịch mã được tạo ra) để khai báo lớp như một phần?

Trả lời

3

Có cách bạn có thể khai báo lớp DataContract của mình là một phần.

Đối với điều này, bạn muốn sử dụng DTO pattern. Về cơ bản, điều này có nghĩa là định nghĩa các lớp "được chia sẻ" trong một hội đồng khác nhau, và có cả Dịch vụ và Ứng dụng tiêu thụ Dịch vụ, cả tham chiếu đến assembly với các lớp chung của bạn.

Vì vậy, ví dụ: hội đồng "DTO" của bạn có thể chứa DTO được gọi là "Sản phẩm". Ok, vì vậy bạn làm cho họ một phần, và tiếp theo bạn trang trí sản phẩm, và bao giờ lớp khác với các thuộc tính WCF, như DataContract, và DataMember vv

Bây giờ, bạn tham khảo bạn lắp ráp DTO với bạn Dịch vụ dự án, và Web của bạn Dự án.

Bây giờ, khi bạn truy cập dự án web của mình và nhấp vào "Thêm tham chiếu dịch vụ", hãy nhấp vào "Nâng cao" và bạn sẽ nhận thấy bạn có thể bật tùy chọn "sử dụng lại cụm được tham chiếu". làm điều đó và bạn sẽ có toàn quyền kiểm soát đối với bạn DataContracts.

+0

Cảm ơn, hãy thử ngay bây giờ. – scripni

+0

tuyệt, làm thế nào nó đi? – andy

+0

Nó hoạt động nhưng không phải trong trường hợp của tôi, một trong những lý do mà tôi cần tất cả logic nghiệp vụ tách ra khỏi lớp trình bày là logic nghiệp vụ chạy dưới .NET 4.0, trong khi trang web chạy dưới .NET 3.5. Vì vậy, tôi không thể có một tài liệu tham khảo mà hoạt động cho cả hai lớp dịch vụ và cho các lớp trình bày (tôi nghĩ). Cảm ơn vì giải pháp mặc dù, nó sẽ hữu ích để biết về các dự án khác. – scripni

0

Lớp proxy tham chiếu trống của khách hàng thực sự có thể là một vấn đề khó chịu nhất để giải quyết.

Tôi khuyên bạn nên sử dụng WCF Test Client hoặc dòng lệnh svcutil.exe. đối với dịch vụ - bạn thường có thể có mô tả lỗi chi tiết hơn với các công cụ này so với trình hướng dẫn tham chiếu dịch vụ Visual Studio.

Trong trường hợp của tôi các vấn đề này được không thay đổi liên quan đến serialization hoặc namespacing vấn đề của thực thể/đồ thị - thường không hạnh phúc getset trên DataMember tài sản, thiếu KnownType trên thực thể đa hình, hoặc tham chiếu vòng tròn trong đồ thị.

Một phần không phải là vấn đề. Chỉ cần đảm bảo rằng bất kỳ thuộc tính bổ sung nào mà bạn muốn tuần tự hóa được đánh dấu là DataMember.

Nếu mọi thứ khác không thành công, khuyên bạn nên chạy thử nghiệm đơn vị tuần tự hóa/deserialization đối với biểu đồ tổ chức/thực thể của bạn.

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