2012-04-20 102 views
2

我正在使用的程序公开使用wcf的回调和服务。 基本上,服务所做的只是返回一些变量值。至于回调,他们只是更新这些变量。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。

这可能吗?

回答

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个服务。一个基于实现类,另一个基于“Dummy”类。每个服务都将从不同的界面创建,从而暴露出不同的方法。