我工作的程序公开使用WCF既回调和服务。 基本上,服务做的只是返回一些变量的值。 至于回调,他们简单地更新这些变量。
我希望能够揭露仅包含的服务和包含的服务和回调一个班一个班。
例如 :
[ServiceContract]
[ServiceBehavior(InstanceContextMode=InstanceContextMode::Single, ConcurrencyMode=ConcurrencyMode::Multiple)]
public ServiceClass
{
[OperationContract]
public int getValue()
{
return mValue;
}
protected static int mValue;
};
[ServiceContract]
[ServiceBehavior(InstanceContextMode=InstanceContextMode::Single, ConcurrencyMode=ConcurrencyMode::Multiple)]
public ServiceAndCallbackClass : ServiceClass
{
[OperationContract]
public bool subscribe()
{
// some subscribing stuff
}
public void MyCallback()
{
++mValue;
// Notify every subscriber with the new value
}
};
如果我只想要的服务,我可以使用的基类。 但是,如果我想订阅回调和使用这项服务,我可以使用ServiceAndCallbackClass。
这可能吗 ?
一个解决方案,我发现:
让2个接口。 第一种仅含有服务和第二个从第一个继承和添加回调。
一个实现类将实现2个接口。
例如:
[ServiceContract]
[ServiceKnownType(typeof(ICallback))]
public interface IService
{
[OperationContract]
int GetData();
}
[ServiceContract]
public interface ICallback : IService
{
[OperationContract]
public bool subscribe();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode::Single, ConcurrencyMode=ConcurrencyMode::Multiple)]
public ServiceClass : IService, ICallback
{
public int getValue()
{
return mValue;
}
public bool subscribe()
{
// some subscribing stuff
}
public void myCallback()
{
++mValue;
// Notify every subscriber with the new value
}
protected static int;
};
[ServiceBehavior(InstanceContextMode=InstanceContextMode::Single, ConcurrencyMode=ConcurrencyMode::Multiple)]
public ServiceAndCallbackClass : ServiceClass
{
// Dummy implementation used to create second service
};
从这里,我们可以创建2个服务。 一个基础上,实现类和一个基于“虚拟”类。 每个服务将来自不同的接口来创建和由此暴露不同的方法。