Интерфейсы контрактов на обслуживание могут происходить друг от друга, что позволяет вам определять иерархию контрактов.Однако ServiceContract attribute is not inheritable
:
[AttributeUsage(Inherited = false,...)]
public sealed class ServiceContractAttribute : Attribute
{...}
Следовательно, каждый уровень в иерархии интерфейса должен явно иметь атрибут Договора на обслуживание.
Иерархия договора на стороне обслуживания:
[ServiceContract]
interface ISimpleCalculator
{
[OperationContract]
int Add(int arg1,int arg2);
}
[ServiceContract]
interface IScientificCalculator : ISimpleCalculator
{
[OperationContract]
int Multiply(int arg1,int arg2);
}
Когда речь идет о реализации иерархии контрактов, один класс обслуживания может реализовывать всю иерархию, как и в классическом программировании на C #:
class MyCalculator : IScientificCalculator
{
public int Add(int arg1,int arg2)
{
return arg1 + arg2;
}
public int Multiply(int arg1,int arg2)
{
return arg1 * arg2;
}
}
Хост может предоставить единственную конечную точку для самого нижнего интерфейса виерархия:
<service name = "MyCalculator">
<endpoint
address = "http://localhost:8001/MyCalculator/"
binding = "basicHttpBinding"
contract = "IScientificCalculator"
/>
</service>
Вам не нужно беспокоиться об иерархии контрактов.Вдохновленный Книга Юваль Лоуи WCF