WCF では、複数の操作コントラクトを使用するのが良いでしょうか、それともポリモーフィック データ コントラクトを使用して操作を 1 つだけ使用するのが良いでしょうか?

StackOverflow https://stackoverflow.com/questions/3006364

質問

WCF では複数の操作コントラクトを使用するのが良いのか、ポリモーフィック データ コントラクトを持つ操作コントラクトを 1 つだけ使用するのが良いのか疑問に思っていました。

小さな例を挙げましょう:

[OperationContract]
action1Answer action1(action1data a);

[OperationContract]
action2Answer action2(action2data a);

または

[OperationContract]
actionAnswer action(actionContract a);

アクション コントラクトは、action1Contract と action2Contract の両方が継承する抽象クラスになります。アクションコントラクトでは、 do() インターフェース内のメンバー関数は、子クラスでオーバーロードされる必要があります。

個人的には、2 番目のアプローチの方が興味深いと思います。これにより、データとアクションを派生 actionContract に適切にカプセル化でき、新しいアクションの追加が容易になります。ただし、WCF を使用するのは初めてなので、おそらくあなたがよく知っているでしょう。

役に立ちましたか?

解決

この質問OO多型とSOAの聖戦のエッジ上の境界線が、私は私の2セントを提供します:

あなたはサービス層を開発検討している場合は、

、それが何に合格すると何を期待するサービスの最終消費者に明確でなければなりません。アプローチ2は、うまく処理されません。 WCFでSOAPをやって、その後、他の.NETプロジェクトでWSDLからロードする場合(また、それが適切に抽象クラスをマークしていない、またインタフェースが転送されますか。WSDLには、非インスタンス化基本クラスを記述する方法はありません、それはそうです。)

けれども、私は(私はちょうど今marc_s掲載している見るように)私は2番目のプロセスがKnownTypeAttributesを使用して素晴らしいと思い、認めなければならない - 未知の将来の要件を考慮したとき、私はそれを自分自身を使用しました。

他のヒント

OOP の観点からは、アプローチ #2 の方が優れていると思います。

しかし:通常、SOA/WCF とポリモーフィズムはあまり一致しません。SOA (少なくとも SOAP ベースの呼び出しを行う場合) には、サービスを定義する WSDL/XSD で表現できる具象クラスが必要です。

あなた できる 共通の基本型に基づいた派生データ型を使用します。その場合は、 既知のタイプ 属性(または サービス既知のタイプ) 操作コントラクトで実際に指定されているもの以外のものを返す可能性があることを WCF に通知します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top