Tôi đang cố gắng để lấy một danh sách các đối tượng từ Entity Framework qua WCF, nhưng tôi nhận được ngoại lệ sau đây:DataContractSerializer Lỗi sử dụng Entity Framework 4.0 với WCF 4,0
Có lỗi trong khi cố gắng để serialize tham số http://tempuri.org/:GetAllResult. Thông báo InnerException là 'Loại' Hệ thống.Data.Entity.DynamicProxies.TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE 'với tên hợp đồng dữ liệu' TestObject_240F2B681A782799F3A0C3AFBE4A67A7E86083C3CC4A3939573C5410B408ECCE: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies 'không được mong đợi. Hãy xem xét sử dụng một DataContractResolver hoặc thêm bất kỳ loại không được biết đến tĩnh vào danh sách các loại đã biết - ví dụ, bằng cách sử dụng thuộc tính KnownTypeAttribute hoặc bằng cách thêm chúng vào danh sách các kiểu đã biết được truyền cho DataContractSerializer. '. Vui lòng xem InnerException để biết thêm chi tiết.
Tôi đã sử dụng WCF trong quá khứ, nhưng không bao giờ có Khung thực thể. Tôi có tất cả các thực thể của mình được tạo thông qua Entity Framework và được chú thích với các thuộc tính [DataContract] và [DataMember]. Tôi không có Thuộc tính Điều hướng trên bất kỳ thực thể nào của tôi.
Các GetAll() phương pháp được gọi là trong một lớp dịch vụ trừu tượng:
[ServiceContract]
public interface IService<T>
{
[OperationContract]
List<T> GetAll();
}
Và tôi đang sử dụng ChannelFactory để gọi thực hiện của tôi:
Binding binding = new NetTcpBinding();
EndpointAddress endpointAddress = new EndpointAddress("net.tcp://localhost:8081/" + typeof(TestObjectService).Name);
using (ChannelFactory<ITestObjectService> channel = new ChannelFactory<ITestObjectService>(binding, endpointAddress))
{
ITestObjectService testObjectService = channel.CreateChannel();
testObjects = testObjectService.GetAll();
channel.Close();
}
Tôi đang lưu trữ nó như vậy:
Type type = typeof(TestObjectService);
ServiceHost host = new ServiceHost(type,
new Uri("http://localhost:8080/" + type.Name),
new Uri("net.tcp://localhost:8081/" + type.Name));
host.Open();
Khi sử dụng gỡ lỗi, nó tìm thấy các đối tượng từ cơ sở dữ liệu, tuy nhiên, nó là fai ling trả lại đồ vật.
Bất kỳ ý tưởng nào về nơi tôi có thể gặp sự cố?
Điều này đã giúp tôi rất nhiều. Nếu bạn gặp vấn đề được mô tả trong câu hỏi này, bạn cũng nên đọc http://stackoverflow.com/questions/4596371/what-are-the-downsides-to-turning-off-proxycreationenabled-for-ctp5-of-ef- code-f –
Cảm ơn rất nhiều vì câu trả lời đó! – hupseb
Tôi đã phải đúc DbContext của tôi đến một ObjectContext đầu tiên. Trong VB.NET, trông giống như 'DirectCast (Me, IObjectContextAdapter) .ObjectContext.ContextOptions.ProxyCreationEnabled = False' – BlueMonkMN