WCF サービスにはいくつの ServiceContract を含めることができますか?
-
09-06-2019 - |
質問
WCF サービスにはいくつの ServiceContract を含めることができますか?
具体的には、ServiceContract はインターフェイスの属性であるため、1 つの WCF Web サービスにいくつのインターフェイスをコーディングできますか?1対1ですか?
複数の Web サービスにわたって契約を分離することに意味はありますか?
解決
必要なすべてのサービス コントラクトをサービスに実装させることができます。つまり、制限があるかどうかはわかりませんが、制限はないと思います。
これは、同じサービスによって実装される操作を、概念的に異なるいくつかのサービス コントラクト インターフェイスに分離するための優れた方法です。
他のヒント
WCF サービスには複数のエンドポイントを持つことができ、それぞれに異なるサービス コントラクトを実装できます。
たとえば、サービスを次のように宣言できます。
[ServiceBehavior(Namespace = "DemoService")]
public class DemoService : IDemoService, IDoNothingService
これには次のような構成が含まれます。
<service name="DemoService" behaviorConfiguration="Debugging">
<host>
<baseAddresses>
<add baseAddress = "http://localhost/DemoService.svc" />
</baseAddresses>
</host>
<endpoint
address =""
binding="customBinding"
bindingConfiguration="InsecureCustom"
bindingNamespace="http://schemas.com/Demo" contract="IDemoService"/>
<endpoint
address =""
binding="customBinding"
bindingConfiguration="InsecureCustom"
bindingNamespace="http://schemas.com/Demo" contract="IDoNothingService"/>
</service>
それが役立つことを願っていますが、サービスに使用できる理論上の最大インターフェイスを求めている場合、それは非常に大きな2の倍数であると思います。
@jdiaz
もちろん、サービスごとにまったく異なるビジネス事項を扱うように努める必要がありますが、たとえば、すべてのサービスで GetVersion() オペレーションを実装したい場合を考えてみましょう。すべてのサービスのコントラクトに GetVersion() オペレーションを追加する代わりに、そのオペレーション専用のサービス コントラクトを作成し、すべてのサービスにそれを実装させることができます。
サービスは理論的には任意の数のエンドポイントを持つことができ、各エンドポイントは特定のコントラクトまたはインターフェイスにバインドされているため、単一の概念上の (および構成された) サービスが複数のエンドポイントを介して複数のインターフェイスをホストしたり、複数のエンドポイントがホストしたりすることが可能です。同じインターフェイス。
ただし、IIS の代わりに ServiceHost クラスを使用してサービスをホストしている場合は、ServiceHost ごとに 1 つのインターフェイスしか関連付けることができません。なぜそうなるのかは分かりませんが、そうなのです。