WCF服务继承(扩展服务)(Wcf service inheritance (Extend a se

2019-09-16 15:40发布

我工作的程序公开使用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。

这可能吗 ?

Answer 1:

一个解决方案,我发现:

让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个服务。 一个基础上,实现类和一个基于“虚拟”类。 每个服务将来自不同的接口来创建和由此暴露不同的方法。



文章来源: Wcf service inheritance (Extend a service)