2012-04-20 105 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」類。每個服務都將從不同的界面創建,從而暴露出不同的方法。