IPersistentSubscriptionService接口的方法通过SubscriptionManager<T>实现,如例B-4所示。例B-4与例B-2非常相似,但订阅者是被存储到SQL Server中,而不是存储在内存的字典对象中。
public abstract class SubscriptionManager<T> where T : class
{
static void AddPersistent(string address,string eventsContract,
string eventOperation)
{
//使用ADO.NET在 SQL Server中存储订阅
}
static void RemovePersistent(string address,string eventsContract,
string eventOperation)
{
//使用ADO.NET将订阅从SQL Server中移除
}
[OperationBehavior(TransactionScopeRequired = true)]
public void Unsubscribe(string address,string eventsContract,
string eventOperation)
{
if(String.IsNullOrEmpty(eventOperation) == false)
{
RemovePersistent(address,eventsContract,eventOperation);
}
else
{
string[] methods = GetOperations( );
Action<string> removePersistent = delegate(string methodName)
{
RemovePersistent(address,eventsContract,methodName);
};
Array.ForEach(methods,removePersistent);
}
}
[OperationBehavior(TransactionScopeRequired = true)]
public void Subscribe(string address,string eventsContract,
string eventOperation)
{
if(String.IsNullOrEmpty(eventOperation) == false)
{
AddPersistent(address,eventsContract,eventOperation);
}
else
{
string[] methods = GetOperations( );
Action<string> addPersistent = delegate(string methodName)
{
AddPersistent(address,eventsContract,methodName);
};
Array.ForEach(methods,addPersistent);
}
}
//更多成员
}