方法 WCF 无法识别参数实体框架



当drupal应用程序使用我们继承的WCF服务时,它会发送一个XML,该xml应生成实体框架参数。经过一些架构更改后,我们更新了实体框架模型(edmx 文件(。问题是,当客户端调用服务(使用与以前相同的代码(时,usageritem 参数未正确反序列化。发送到该方法的调用如下所示:

<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">

我想知道在使用sql server 2005之前生成此edmx的事实与我们现在使用sql server 2012更新它并且我们仅更改了ProviderManifestToken="2005"的事实之间是否存在问题。谢谢你的帮助

你的问题有点模棱两可 - 在输入方法之前对服务的调用是否失败,或者,如果不是,你的意思是参数为 null 还是它的某些属性为 null?

如果是后者,我只能猜测从数据库更新实体框架模型,更改了类fUsagerItem的属性顺序。您可以手动检查服务的 WSDL 引用的 .xsd 文件,并查看 WCF 对 XML 的期望。使用 [DataMember(Order = ?)] 属性更改属性的序列化顺序,但您必须将这些属性放在设计器生成的类中(这是一个坏主意(。

通常认为不应在 Web 服务中直接使用实体框架对象,尤其是当您从其他框架(如 PHP(使用服务时。创建自己的数据传输对象时,可以更好地控制序列化过程:可以隐藏某些属性或引入数据库中不存在的新属性。如果你能说服你的客户改变他们的实现,我建议在你的服务中使用DTO类(AutoMapper可以帮助很多将DTO对象映射到实体,反之亦然(。

相关内容

  • 没有找到相关文章

最新更新