首先声明一下:我对WCF还比较新。
我正在开发一个服务器端程序,负责处理大量的业务逻辑。客户端可以通过WCF访问该程序。
我的主要WCF方法会调用其他几个私有方法。为了避免在每个私有方法中传递所有需要的“查找数据”,我决定使用一个名为DataProvider的类的单例实例来包含所有这些“查找数据”。
在程序结束时,我会“释放”DataProvider的查找数据,以便下次执行该程序时使用最新的查找数据。
以下是一个简化的示例:
public void Generate()
{
try
{
//populate singleton DataProvider with it's lookup data...
DataProvider.Instance.LoadLookupData();
//do business logic...
}
finally
{
//release provider's lookup data...
DataProvider.Release();
}
}
这个方法在同时(或接近)被两个不同的客户端执行时,会出现问题。这是因为它们共享同一个单例实例,先完成任务的客户端会在另一个客户端完成之前释放 DataProvider,从而导致问题。
那么,有哪些解决方案呢?我想避免传递所有查找数据,因此单例模式(或某种变体)似乎是一个不错的选择。我还需要支持多个客户端同时调用该方法。
我相信 WCF 服务已经配置成“Per-Call”模式。我不确定是否有一种方法可以配置 WCF 服务,使静态内存不在服务调用之间共享。
感谢您的帮助。