2010-01-10 29 views
5

tôi có hai dịch vụ web. Một với chức năng người dùng, một với chức năng quản trị.Sự cố với WCF và nhiều không gian tên - các loại đối tượng chia sẻ trên nhiều tài liệu tham khảo dịch vụ

Cả hai dịch vụ một cách hiệu quả làm việc với các loại cùng một đối tượng, ví dụ:

  • AdminService cung cấp chức năng xóa/sửa đổi các đối tượng khách hàng
  • UserService cung cấp chức năng niêm yết/đọc khách hàng đối tượng

Bây giờ trong khách hàng tôi có hai tài liệu tham khảo dịch vụ, Webservices.Admin và Webservices.User.

Nếu tôi sử dụng UserService để truy xuất đối tượng khách hàng, tôi không thể thao tác những người đó thông qua AdminService, vì UserService truy xuất đối tượng kiểu Webservices.User.Customer, tuy nhiên AdminService hoạt động với các đối tượng kiểu Webservices.Admin.Customer.

Ở phía máy chủ, cả hai loại đều giống nhau, chỉ thuộc về các không gian tên khác nhau trong ứng dụng khách.

Bây giờ câu hỏi: Làm cách nào để chia sẻ các loại trên các tham chiếu dịch vụ khác nhau?

Trả lời

1

Nếu bạn đang kiểm soát cả hai đầu của truyền thông, và cả hai đầu chỉ là .NET, bạn có thể làm điều này:

  • đặt tất cả các hợp đồng của bạn, bao gồm cả hợp đồng dữ liệu của bạn, vào một "hợp đồng riêng biệt "lắp ráp
  • tham khảo lắp ráp trong cả mã thi phía máy chủ, cũng như mã phía khách hàng

Nếu bạn làm điều này, khi thêm các tài liệu tham khảo phục vụ, WCF sẽ tìm và sử dụng rằng chia sẻ lắp ráp, và không tạo ne w loại cho các entitites. Trong trường hợp của bạn, bạn chỉ có một loại Contracts.Customer hoặc bất kỳ thứ gì bạn đang xử lý.

Điều này hoạt động chỉ nếu bạn kiểm soát cả hai đầu của dây và có .NET ở cả hai đầu! Nhưng trong trường hợp đó, đó là một cách tuyệt vời để chia sẻ hợp đồng - đặc biệt là hợp đồng dữ liệu - trên cả máy chủ và bất kỳ số lượng khách hàng nào.

+0

Có tôi kiểm soát mọi thứ. Tuy nhiên khách hàng là silverlight, vì vậy chia sẻ hợp đồng lắp ráp là không thể (bởi vì các datacontracts của tôi đến từ Entity Framework). Nếu khách hàng là bất kỳ khách hàng wcf nào khác ngoại trừ Silverlight, thì nó hoạt động. –

+0

OK, Silverlight là một điểm quan trọng cần được đề cập ngay từ đầu. Nhưng bạn vẫn có thể tạo một assembly Silverlight chứa một kiểu serialize cho cùng cấu trúc với Customer từ EF của bạn, gắn nó vào một assembly riêng biệt, và tham chiếu đến assembly chung từ bất kỳ bộ phận nào của client. –

+0

@marc_s Marc, tôi đang gặp vấn đề tương tự đang được mô tả ở trên, tuy nhiên tôi muốn biết làm thế nào tôi sẽ đi về serializing Silverlight hội để có cấu trúc tương tự như các.NET lắp ráp? Tôi tạo ra một hội đồng SL với các lớp học chính xác cùng trong nó trên khách hàng Silverlight của tôi nhưng điều đó dường như không hoạt động, vì vậy tôi đoán tôi đang làm sai. – stuartmclark

1

Sử dụng slsvcutil để tạo proxy WCF trên ứng dụng khách (giả sử ứng dụng khách là ứng dụng .net), tham chiếu DLL chứa đối tượng của bạn và nó sẽ được sử dụng cho tất cả các điểm cuối vượt qua cùng một đối tượng trong DLL

mở Visual Studio Cửa sổ nhắc lệnh từ Start -> Visual Studio 2008 -> Tools -> Visual Command Prompt

thư mục goto tương tự như

C: \ Program Files \ Microsoft SDK \ Silverlight \ v3 .0 \ Công cụ

loại slsvcutil và làm theo cú pháp

slsvcutil http://somewcfservice:8080 /r:CommonLibrary.dll 

nơi CommonLibrary.dll là dll chứa kinh doanh đối tượng

[sửa] cố định thực tế rằng dự án này là một dự án Silverlight

2

Check-out http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/ Bằng cách tinh chỉnh file Reference.svcmap bạn có thể chắc chắn rằng chỉ có một lớp được tạo ra cho mỗi DataContract sử dụng bởi các tài liệu tham khảo dịch vụ khác nhau.

Lưu ý: Hãy nhớ xóa nội dung của nút trước khi nhấn 'Cập nhật dịch vụ cập nhật'

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