您好我正在使用WCF创建一个宁静的服务,该服务可能会在任何给定时间被至少500人使用。我需要设置什么设置才能解决这个问题。请给我任何要点和提示,谢谢。
以下是我目前的样本;
[ServiceBehavior(IncludeExceptionDetailInFaults = true, InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
这是一个被调用方法的例子;
public UsersAPI getUserInfo(string UserID)
{
UsersAPI users = new UsersAPI(int.Parse(UserID));
return users;
}
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "User/{UserID}")]
[WebHelp(Comment = "This returns a users info.")]
UsersAPI getUserInfo(string UserID);
答案 0 :(得分:7)
最好的方法是使用:
InstanceContextMode.PerCall
ConcurrencyMode.Single
这将为每个调用者创建一个新的服务类实例,从而使您不必担心代码的多线程并发访问,因为每个请求都有自己的服务类实例(它本身就是单个 - thread - 它一次只为一个调用者提供服务。)
此外,通过这种方法,您可以轻松地“向外扩展”,例如只需添加更多服务器即可处理更高的负载(您所在位置的服务器或“云端”服务器,例如Windows Azure工作人员)。
使用ServiceThrottling
服务行为,您可以非常轻松地控制允许的并发呼叫者数量 - 这取决于您的计算机的类型和大小。
<serviceBehaviors>
<behavior name="Throttling">
<serviceThrottling
maxConcurrentCalls="16"
maxConcurrentInstances="16"
maxConcurrentSessions="10" />
</behavior>
</serviceBehaviors>
这些是WCF 3.5的默认设置 - maxConcurrentCalls
设置定义了可以同时处理多少呼叫者。