【发布时间】:2011-10-18 23:46:21
【问题描述】:
我正在创建一个 WCF 服务库,我有一个关于线程安全使用该库中的方法的问题,这是我到目前为止的完整实现。
namespace WCFConfiguration
{
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]
public class ConfigurationService : IConfigurationService
{
ConcurrentDictionary<Tuple<string,string>, string> configurationDictionary = new ConcurrentDictionary<Tuple<string,string>, string>();
public void Configuration(IEnumerable<Configuration> configurationSet)
{
Tuple<string, string> lookupStrings;
foreach (var config in configurationSet)
{
lookupStrings = new Tuple<string, string>(config.BoxType, config.Size);
configurationDictionary.TryAdd(lookupStrings, config.RowNumber);
}
}
public void ScanReceived(string boxType, string size, string packerId = null)
{
}
}
}
假设我的 configurationDictionary 中有 10 个值,并且许多人想使用 ScanReceived 方法查询这个字典,这 10 个值是否为请求 ScanReceived 的每个客户端共享?我需要更改我的 ServiceBehavior 吗?
顺便说一句,Configuration方法只供一个人使用。
【问题讨论】:
-
您的服务具有 ConcurrencyMode.Single,因此您不会遇到并发问题。此外,ScanReceived 没有代码,所以我很确定您可以安全地调用返回 void 的无操作方法。
-
我仍在处理 ScanReceived 的代码,但它会更改为 int。
标签: c# .net wcf web-services thread-safety