3

WCFのさまざまなことを理解するために、たくさんのことを読んでいます。

間もなく、実際には、既存のWSE3WebサービスをWCFに移動/変換したいと思います。既存のWSEWebサービスには、環境内のエンティティをモデル化するいくつかの(データ)クラスがあります。

これらのクラスを変換するときに、データコントラクト/データメンバー属性またはMessageContract属性を使用する必要がありますか?

1. WCFでメッセージコントラクトとデータコントラクトのどちらを使用するかを決定するにはどうすればよいですか?2.バインディングのタイプ(basicHttpBindingなど)は、この決定に何らかの役割を果たしますか?3.クライアント側で作成されたプロキシ(Web参照を追加する場合)は、データまたはメッセージの契約に応じて大幅に変更されますか?

(追記:既存のWSEクライアントが多くの変更や変更を加えずにWCFサービスを利用できるようにする方法を模索しています。ASMXWebサービスから生成された現在のプロキシを使用して新しいWCFサービスに接続することは可能ですか?プロキシのURLをWCFサービスに設定するだけですか?)

4

2 に答える 2

3

ここにあなたの質問に答える簡単な道があります:

1)soap XMLの構造を微調整するなどの特別な理由がない限り、MessageContractの代わりにDataContractを使用してください。

2&PS)現在soap over HTTPを使用しているため、basicHttpBinding用に新しいサービスを構成する必要がある可能性があります。これにより、ASMXクライアントに必要な相互運用性が提供されます。

3)WCFサービスによって作成された石鹸の構造が現在の石鹸と一致するかどうかは関係ありません。

WSE3.0がいくつかのWS-*標準をサポートしていたことをぼんやりと覚えています。現在のコードがこれらに依存している場合は、これらの操作のwsHttpBindingも公開できる可能性がありますが、デフォルトのASMXクライアントがwsHttpBindingで構成されたサービスで機能するとは思いません。

于 2011-03-18T15:33:31.293 に答える
2

結果の SOAP メッセージに対して必要な制御に依存します。DataContract は、操作によって定義された要素によってラップされたメッセージ本文の一部を定義します。MessageContract は、メッセージ全体の構造を定義します。複数のボディ メンバーを使用できます。デフォルトのラッパー要素を使用する必要はなく、一部のデータを SOAP ヘッダーに配置することもできます。

あなたのシナリオで最も重要な部分は、以前の WSE3 サービスと同じ SOAP メッセージを使用するように WCF を定義することです。ここで重要なのは、現在どのようにデータをシリアル化していますか? Xml シリアライゼーション (および属性) を使用する場合は、データ コントラクト シリアライゼーションから xml シリアライゼーションに切り替えることで、WCF で直接使用できます。

ところで。プレーンな ASMX の代わりに WSE3 を使用したのはなぜですか? メッセージ セキュリティを使用しましたか? そのような場合は、別のバインディングが必要になります。BasicHttpBinding はメッセージ セキュリティを行うことができません。

一般的な答えは「はい」です。現在のクライアント プロキシが使用できるサービスを作成できます。しかし実際には、その努力は現在のサービスと現在のコードに依存します。

于 2011-03-18T15:23:01.027 に答える