0

drupal アプリケーションは、継承した WCF サービスを使用しているときに、エンティティ フレームワーク パラメーターになる xml を送信します。いくつかのスキーマ変更の後、エンティティ フレームワーク モデル (edmx ファイル) を更新しました。問題は、クライアントが (以前と同じコードで) サービスを呼び出すときに、usageritem パラメーターが適切に逆シリアル化されないことです。メソッドへの呼び出し send は次のとおりです。

<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 server 2012 を使用して更新しているという事実の間に問題がないかどうかを知りたかったのですが、ProviderManifestToken="2005" のみを変更しました。あなたの助け

4

1 に答える 1

0

あなたの質問は少しあいまいです - メソッドに入る前にサービスへの呼び出しが失敗しますか、そうでない場合は、パラメーターが null であるか、そのプロパティの一部が null であることを意味しますか?

fUsagerItem後者の場合、データベースから Entity Framework モデルを更新したことで、クラス内のプロパティの順序が変更されたとしか推測できません。サービスの WSDL によって参照される .xsd ファイルを手動で検査し、WCF が XML をどのように想定しているかを確認できます。属性を使用してプロパティのシリアル化の順序を変更し[DataMember(Order = ?)]ますが、それらをデザイナーが生成したクラスに配置する必要があります (これは悪い考えです)。

一般に、特に PHP などの他のフレームワークからサービスを利用する場合は、Web サービスでエンティティ フレームワーク オブジェクトを直接使用すべきではないと考えられています。独自のデータ トランスポート オブジェクトを作成すると、シリアル化プロセスをより詳細に制御できます。一部のプロパティを非表示にしたり、データベースに存在しない新しいプロパティを導入したりできます。クライアントに実装を変更するよう説得できる場合は、サービスで DTO クラスを使用することをお勧めします (AutoMapper は、DTO オブジェクトをエンティティに、またはその逆にマッピングするのに役立ちます)。

于 2013-10-22T08:37:23.433 に答える