1

現在、IIS でホストされている古い ASMX サービスといくつかの新しい WCF サービスの組織的な混乱があります。

以前は、API を必要とする 10 の異なるベンダーがいた場合、10 の異なる WCF サービスが存在することになり、構成の重複やどのサービスが何を行うかを追跡することは言うまでもなく、組織的な混乱を招くことになります。

単一の .svc ファイルと単一のエンドポイントを使用して、これらすべてを単一の WCF サービスに結合したいと考えています。メソッドをセグメント化または整理する方法を知りたいです (つまり、OperationContract レベルで)。たとえば、一部の学生データを処理する一連のメソッドと、財務データを処理する別の一連のメソッドがあり、それらを独自の個別のグループに編成したい場合、どうすればよいでしょうか? ロールを使用することで、メソッドを使用するための承認を制御できることはわかっています。そのため、承認は私が求めているものではないことを明確にしたいと思います。コードを最適に整理する方法を知りたいです。OperationContract レベルで名前空間を定義できるようには見えません。私のニーズに合った OperationContract レベルの属性は実際にはありません。

助言がありますか?

4

1 に答える 1

2

1 つのサービスで複数のインターフェイスを定義および実装でき、それぞれが独自のエンドポイントを取得します。ベンダーごとに 1 つのインターフェイスを用意することもできます。共有コード/機能がある場合、個別のインターフェイスが同じクラス/dll に委任できます。

非常に類似したベンダーの場合、インターフェイスを共有するか、個々のベンダー インターフェイスに「基本」インターフェイスを継承させることができます。

一部のベンダー向けに異なる物理サービスを使用することを決定した場合、この方法を使用すると、非常に簡単に実行できます。

はい、インターフェイスごとに個別のエンドポイントがありますが、同じベースアドレス、サービス、およびbindingConfiguration(同じプロトコルを使用すると仮定して) を共有するため、維持するのは難しくありません。私はこのパターンで成功しました。物事が密結合しすぎず、実用的な限り多くの構成を共有するのに十分な分離を維持していると思います。これは、個別のインターフェースを公開しているが、サービスと bindingConfig を共有しているサーバー側の構成のサンプルです。

<services>
  <service name="namespace.Vendors">
    <clear />
    <endpoint address="Vendor1" binding="basicHttpBinding"
      bindingConfiguration="HTTPBindingConfig" name="Vendor1HTTP"
      contract="PGF.Business.IVendor1" listenUriMode="Explicit">
    </endpoint>
    <endpoint address="Vendor2" binding="basicHttpBinding"
      bindingConfiguration="HTTPBindingConfig" name="Vendor2HTTP"
      contract="PGF.Business.IVendor12" listenUriMode="Explicit">
    </endpoint>
  </service>
</services>
于 2013-09-12T18:08:31.200 に答える