WCF サービスはいくつの ServiceContract を持つことができますか?
具体的には、ServiceContract はインターフェイスの属性であるため、1 つの WCF Web サービスにコーディングできるインターフェイスの数はいくつですか? 一対一ですか?
コントラクトを複数の Web サービス間で分離することは理にかなっていますか?
WCF サービスはいくつの ServiceContract を持つことができますか?
具体的には、ServiceContract はインターフェイスの属性であるため、1 つの WCF Web サービスにコーディングできるインターフェイスの数はいくつですか? 一対一ですか?
コントラクトを複数の 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 つのインターフェイスしか関連付けることができません。なぜそうなのかはわかりませんが、そうです。