我在测试工具中有几个WCF服务,这些服务具有一些类似的功能,比如正在测试的分布式系统的启动/停止/清理部分。我不能使用通用合同来做到这一点 - 分布式系统的每个部分都有不同的步骤用于这些操作。
我正在考虑定义基本接口并从中导出当前的WCF接口。
例如:
interface Base
{
void BaseFoo();
void BaseBar();
...
}
interface Child1:Base
{
void ChildOperation1();
...
}
interface Child2:Base
{
void ChildOperation2();
...
}
我现在拥有的是每个子界面中定义的启动/停止/清理操作。
问我应该在基础界面中提取类似的功能,还是有其他解决方案?我在WCF中继承合同会有任何问题吗?
答案 0 :(得分:20)
服务合同接口可以相互派生,使您可以定义层次结构
合同但是,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>
您不必担心合同层级 灵感来自Juval Lowy WCF book