質問

2つのエンドポイント(EPAおよびEPB)を備えた単一のWCFサービスによって実装された2つの契約(CAおよびCB)があります。

これは いいえ セキュリティの目的で、しかし純粋に明快/組織の理由のために、EndPointaを介してサービスを発見したときに契約の操作を「見る」だけです。同様に、EndPointBを介してContractBの操作のみを参照してください。

これらの操作自体を「保護」する必要はありません。シナリオは、特定のクライアントがサービスの「側面」を1つだけ必要とするだけでなく、両方のものではないようなものです(ただし、オペレーション自体はリソースを共有するため、2つのサービスではなく単一のサービスを持っていることは理にかなっています)。

特定のサービスは基本的に1つのWSDLを取得し、すべての操作はすべてのエンドポイントにさらされているようです。それはそれが機能する方法ですか、それともエンドポイント契約で定義されていない操作を閉塞することにより、エンドポイントを「形作る」方法がありますか?

役に立ちましたか?

解決

デフォルトでは、正しいです - 1つのサービス実装クラスは、このサービスクラスが実装するすべてのサービス方法(すべてのサービス契約から)を含む1つのWSDLを取得します。

wsdlを任意の(簡単な)方法で「形作る」方法はありません - WCFはWSDLを作成するプロセス(静的または動的に)に入る方法を提供しますが、それらはそうではありません。心のかすか。サービス契約の実装を2つの別々のクラスに分割するだけで、2つの個別のサービス、個別のWSDLとすべてがあります。

他のヒント

マークは絶対に正しいです。これがWCFで起こる理由を追加しています。 WCFでは、すべてのメタデータ関連機能は、サービスメタデータの動作とMEXエンドポイントに基づいています。これらの機能は両方とも、サービスレベルで定義されています。したがって、より高い粒度をとることはできません(多くのカスタムコードを書いていない限り)。エンドポイントごとにメタデータを指定します。

WCFサービス(クラス)は、各契約を個別のWSDL:ポート(エンドポイントと呼ばれるWCF)として公開するWSDL:サービス要素に直接マッピングされます。これがあなたの質問に答える主なポイントです。そのWSDL:サービスで2番目の契約を望まない場合、同じクラスで実装できません。

あなたのサービス契約はリソースを共有すると述べました。その場合、WCFサービスにはおそらくビジネスロジックも含まれています。それがあなたの問題の理由です。 WCFサービスを実装するための優れた設計は、個別のビジネスロジッククラスをめぐるラッパーとしてのみ作成することです。

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