Khi tôi chạy dịch vụ của mình, tôi có ngoại lệ:Sê-ri POCO tuần tự hóa với WCF
Máy chủ gặp lỗi khi xử lý yêu cầu. Thông báo ngoại lệ là 'Không thể tuần tự hóa tham số của kiểu System.Data.Entity.DynamicProxies.Cosik_14C2 ...' (cho hoạt động 'GetCosik', hợp đồng 'ICosikService') bởi vì nó không phải là loại chính xác 'Project.Domain.Entities.Cosik 'trong chữ ký phương thức và không có trong bộ sưu tập kiểu đã biết. Để tuần tự hóa tham số, hãy thêm loại vào bộ sưu tập kiểu đã biết cho hoạt động bằng ServiceKnownTypeAttribute. '. Xem nhật ký máy chủ để biết thêm chi tiết.
Tôi mới tham gia các dịch vụ WCF và Khung thực thể và tôi đánh giá cao mọi trợ giúp/đề xuất.
Tôi đang sử dụng Khung thực thể 4.1. Sử dụng mã đầu tiên tôi tạo cơ sở dữ liệu với hai bảng:
[DataContract(IsReference=true)]
public class Cosik
{
[DataMember]
public int cosikID { get; set; }
[DataMember]
public string title { get; set; }
[DataMember]
public int DifficultyID { get; set; }
[DataMember]
public virtual Difficulty Difficulty { get; set; }
}
[DataContract(IsReference=true)]
public class Difficulty
{
[DataMember]
public int DifficultyID { get; set; }
[DataMember]
[Required]
public string NameToDisplay { get; set; }
}
Tiếp theo tôi đã tạo ứng dụng dịch vụ WCF và làm cho nó yên tĩnh. Dưới đây là mã cho giao diện:
[ServiceContract]
public interface ICosikService
{
[OperationContract]
[ApplyDataContractResolver]
[WebGet(UriTemplate = "/cosik")]
Cosik GetCosik();
}
và thực hiện các hợp đồng mà
public class RecipeService : IRecipeService
{
//repository of Cosik entities - stores collection of all
//Cosik entities that can be queried from DB
private ICosikRepository cosikRepo;
...
public Cosik GetCosik()
{
Cosik c = cosikRepo.GetById(1);
return c;
}
tôi thực hiện lớp ApplyDataContractResolverAttribute nhất định trên: http://msdn.microsoft.com/en-us/library/ee705457.aspx và thêm [ApplyDataContractResolver] chú thích phương pháp GetCosik. Tuy nhiên, nó không giúp được gì.
Bất kỳ đề xuất nào tôi đã bỏ lỡ?
Dường như * Cosik * đi vào hoạt động dịch vụ của bạn GetCosik() và mà bạn đã đánh dấu vì hợp đồng dữ liệu không giống * Cosik * như được định nghĩa trong mô hình tổ chức của bạn và dịch vụ của bạn là vì lý do nào đó cố gắng trả lại. –
Bạn vẫn nhận được cùng một lỗi nếu bạn vô hiệu hóa tải chậm trong [ObjectContext] của bạn (http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.aspx) bằng cách sử dụng 'ngữ cảnh. ContextOptions.LazyLoadingEnabled = false'? –
Bạn có thể thêm [KnownType (Cosik)] vào lớp RecipeService của bạn không. – Rajesh