SOAP を介して Java クライアントに公開される Web サービスを開発する必要があります。両方のシステム間の通信に使用する適切に定義されたスキーマがあります。ここで、スキーマ オブジェクトを取得して DB 内に格納する操作を WCF コントラクトに公開する必要があります。
Webサービスを開発するために、次のことを行いました。
- wcf で basichttp 経由でホストする
- xsd.exe を使用してスキーマのオブジェクト モデルを作成する
- DoThis(SchemaObject schema) のような操作のパラメーターとしてスキーマを取得します。
これは WCF で公開される予定なので、xsd ツールで生成されたオブジェクト モデルを変更しました。私たちのスキーマには複数レベルのネストがあり、4 つの異なるスキーマがリンクされています。xsd ツールで生成されたオブジェクト グラフには、抽象クラス、継承などがあります。
これを機能させるために、すべてのクラスで DataContract 属性を定義して定義し、XmlTypeAttribute に既に存在する名前空間をそれに追加しました。また、各プロパティに DataMemebers を追加しました。
スキーマ内の一部のプロパティは、xmlarrayitem 属性を使用してツールによって定義された配列です。
SOAP UI を使用してリクエストを送信すると、オブジェクトが期待どおりに逆シリアル化されません。ほとんどすべてのフィールドが null として送信されます。これには、ある種の継承階層があります。適切なデータ契約に KnownType 属性を追加しましたが、まだ機能していません。
私の質問は:
これは Web サービスを開発する正しい方法ですか。
datacontract と data members を配置することを避け、xsd ツールによって追加されたシリアライゼーション属性を操作する方法はありますか?
datacontract 属性を使用する必要がありますか? XML デシリアライゼーションの場合に機能するので、xmlserialization 属性では機能しませんか?