WCF Чтение данных из службы - PullRequest
2 голосов
/ 04 октября 2011

Я пытаюсь получить общий объект списка List<User> пользователя из моего веб-сервиса в мое веб-приложение.наверное это общая проблема.Я много искал, но получал разные лекарства с каждой ссылкой.так что, наконец, я решил попросить парней здесь ... в любом случае

Я использую консольное приложение для получения данных из моего размещенного веб-сервиса wcf.где мой веб-сервис WCf, имеющий платформу Entity 4.1.Я использую объекты из своего модельного класса.когда я пытался добавить ссылку на службу в мое веб-приложение, оно обычно генерирует прокси в веб-приложении.Я могу опубликовать данные означает, что я мог бы создать пользователя.но пока getusers, который возвращает список, получает следующие исключения ...:

Исключение:
Произошла ошибка при получении ответа HTTP на http://myserver/AdminService/MyAdminService.svc. Это может быть связанок привязке конечной точки службы, не использующей протокол HTTP.Это также может быть связано с тем, что сервер прерывает контекст HTTP-запроса (возможно, из-за закрытия службы).Дополнительные сведения см. В журналах сервера.

Внутреннее исключение:
Основное соединение было закрыто: при получении произошла непредвиденная ошибка

, а внутреннее внутреннее исключение: невозможно прочитать данныеиз транспортного соединения: существующее соединение было принудительно закрыто удаленным хостом.

с сообщением: существующее соединение было принудительно закрыто удаленным хостом
Код ошибки: 10054

Где какВ журнале событий говорится:
Сообщение не было зарегистрировано.
Исключение: System.ServiceModel.CommunicationException: при попытке сериализации параметра произошла ошибка http://tempuri.org/:getUsersResult. Сообщение InnerException было «Тип» System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D 'с именем контракта данных' User_00DEC686D7E21DB0D84B595F647A03FFB4903FDBFE0FDBD050DFD1307D1307105F6105F1606105106106105106776Рассмотрите возможность использования DataContractResolver или добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных в DataContractSerializer. '.Пожалуйста, смотрите InnerException для более подробной информации.---> System.Runtime.Serialization.SerializationException: Тип 'System.Data.Entity.DynamicProxies.User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D' с именем контракта данных «User_00DEC686D7E21DB0D84B595F647A03FFB4943938F76E8C3DBBE0F77F8BC29A1D: http://schemas.datacontract.org/2004/07/System.Data.Entity.DynamicProxies' не ожидается.Рассмотрите возможность использования DataContractResolver или добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных в DataContractSerializer.на System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType (DataContract DataContract, XmlWriterDelegator XMLWriter, OBJ Object, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, тип declaredType) в System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType (XmlWriterDelegator XMLWriter, OBJ Object, RuntimeTypeHandle objectTypeHandle, ТипObjectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Тип declaredType) при System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize (XmlWriterDelegator XMLWriter, OBJ Object, Boolean, Boolean isDeclaredType writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle) в System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, логический writeXsiType, Int32 ОбъявленныйTypeID, RuntimeTypeHandle ОбъявленныйTypeHandle) в WriteArrayOfUserToXml (XmlWriterДелегатор, Объект, XmlObjectSerializerWriteContext, CollectionDataContract) вSystem.Runtime.Serialization.CollectionDataContract.WriteXmlValue (XmlWriterDelegator xmlWriter, Object obj, контекст XmlObjectSerializerWriteContext) в System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent (XmlWriterDelegator писатель, граф объектов, DataContractResolver dataContractResolver) в System.Runtime.Serialization.DataContractSerializer.InternalWriteObject (XmlWriterDelegator писатель, граф объектов, DataContractResolver dataContractResolver) в System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions (XmlWriterDelegator писатель, граф объектов, DataContractResolver dataContractResolver) в System.Runtime.Serialization.XmlObjectSerializer.WriteObject (XmlDictionaryWriter писатель, граф объектов) в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart (XmlDictionaryWriter писатель, часть PartInfo, граф объектов) --- Конец внутренней трассировки стека исключений --- в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart (XmlDictionaryWriter писатель, часть PartInfo, граф объектов) в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameter (XmlDictionaryWriter писатель, часть PartInfo, граф объектов) в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeBody (XmlDictionaryWriter писатель, версия MessageVersion, строковое действие, описание сообщения messageDescription, Object returnValue, Object [] параметры, логическое значение isRequest) в System.ServiceModel.Dispatcher.OperationFormatter.OperationFormatterMessage.OperationFormatterBodyWriter.OnWriteBodyContents (XmlDictionaryWriter писатель) в System.ServiceModel.Channels.BodyWriter.WriteBodyContents (XmlDictionaryWriter писатель) в System.ServiceModel.Channels.Message.ToString (XmlDictionaryWriter писатель) в System.ServiceModel.Diagnostics.MessageLogTraceRecord.WriteTo (XmlWriter писатель) в System.ServiceModel.Diagnostics.MessageLogger.LogInternal (MessageLogTraceRecord запись) в System.ServiceModel.Diagnostics.MessageLogger.LogMessageImpl (Message & сообщение, читатель XmlReader, источник MessageLoggingSource) в System.ServiceModel.Diagnostics.MessageLogger.LogMessage (Message & сообщение, читатель XmlReader, источник MessageLoggingSource) Имя процесса: w3wp Идентификатор процесса: 5928

Каким должен быть этот вопрос. я и команда ищем это с 3 дней. но, к сожалению, пока не преодолена ...

Я пробовал много вещей, таких как добавление сериализуемого атрибута, модификации конечных точек ... я не могу вспомнить все :) ... возможно, вы можете дать нам правильные указания ...

1 Ответ

7 голосов
/ 04 октября 2011

Причина в том, что классы EF по умолчанию проксируются во время выполнения для поддержки отложенной загрузки и динамического отслеживания изменений.Таким образом, вы не сериализуете класс User, а класс, полученный из User во время выполнения.WCF не нравится это.Отключите создание прокси в вашем контексте.

context.Configuration.ProxyCreationEnabled = false;
...