2013-10-09 4 views
0

Когда приложение drupal использует службу WCF, которую мы унаследовали, она отправляет XML-код, который должен привести к параметру рамки сущности. После некоторых изменений схемы мы обновили модель фреймворка сущности (файл edmx). Проблема заключается в том, что когда клиент вызывает службу (с тем же кодом, что и раньше), параметр usageritem не десериализуется должным образом. Вызов отправить метода состоит в следующем:Метод WCF не распознает параметр Entity Framework

<UpdateUsager xmlns="http://tempuri.org/"> 
<usageritem xmlns:a="http://schemas.datacontract.org/2004/07/CNVGestion.Domain" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/" z:Id="i1"> 
<EntityKey xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" i:nil="true"/><a:ADR1>7 rue Diffonty</a:ADR1> .... 

метод, который принимает этот вызов имеет следующий заголовок:

public string UpdateUsager(fUsagerItem usageritem, bool checkonly){ 

EDMX, где объявлен субъект имеет следующий заголовок

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx"> 
    <!-- EF Runtime content --> 
    <edmx:Runtime> 
    <!-- SSDL content --> 
    <edmx:StorageModels> 
    <Schema Namespace="FRONT.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl"> 

Я хотел знать, не может быть проблемы между тем, что этот edmx был сгенерирован перед использованием SQL Server 2005, и мы используем sql сервер 2012 теперь обновить его, и мы только изменили ProviderManifestToken = «2005» .. Благодарим за помощь

ответ

0

Ваш вопрос немного неоднозначен - вызов вашей службы не выполняется до ввода вашего метода или, если нет , вы имеете в виду, что параметр имеет значение null или некоторые его свойства равны нулю?

Если последнее, я могу только предположить, что обновление модели Entity Framework из базы данных изменило порядок свойств в классе fUsagerItem. Вы можете вручную проверить файл .xsd, на который ссылается WSDL службы, и посмотреть, как ожидает WCF XML. Измените порядок сортировки свойств с атрибутом [DataMember(Order = ?)], хотя вам придется помещать их в классы, созданные разработчиками (что плохой идеей).

Обычно считается, что вы не должны напрямую использовать объектные объекты сущности в веб-службе, особенно если вы используете службу из других фреймворков, таких как PHP. У вас больше контроля над процессом сериализации при создании собственных объектов переноса данных: вы можете скрыть некоторые свойства или ввести новые, которые не существуют в вашей базе данных. Если вы можете убедить своего клиента изменить свою реализацию, я бы рекомендовал использовать классы DTO в вашем сеансе (AutoMapper может помочь многому сопоставлению объектов DTO с объектами и наоборот).

+0

Действительно, это был порядок параметров при вызове веб-сервиса. Я изменю метод, чтобы не использовать объект объекта в качестве параметра. – Mistique

+0

Большое спасибо – Mistique

Смежные вопросы