【发布时间】:2013-05-16 19:07:08
【问题描述】:
面对下面的问题同时发送100个请求服务器开始减慢采用新查询的速度,前100个请求触发一个函数执行1分钟等待执行结束,101请求我从浏览器函数发送一个简短的调用,打印字符串和多少请求仍在并行运行。
因此,在所有 100 个请求开始在流中工作之后,101 函数很快并显示 100 个线程现在并行运行。
在网上看了很多资料,一切看起来都应该做的,但还是没有结果
使用 NF 4.5
类属性设置为在并行 C# 代码中工作
[CallbackBehavior(UseSynchronizationContext = false)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple, MaxItemsInObjectGraph = 2147483646)]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceContract(SessionMode = SessionMode.NotAllowed)]
函数仿真加载 1 分钟 C# 代码
private static int threads11 = 0;
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
public string loadConcurency()
{
threads11++;
var count = 0;
while (count < 6000)
{
count++;
Thread.Sleep(10);
}
threads11--;
return "1";
}
功能测试统计C#代码
[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare,
ResponseFormat = WebMessageFormat.Json)]
public string ReportTest()
{
try
{
StringBuilder response = new StringBuilder().AppendLine("threads=" + threads11.ToString() + "; ");
response.AppendLine();
return response.ToString();
}
catch (Exception ex)
{
return ex.ToString() + (ex.InnerException == null ? "" : ex.InnerException.ToString());
}
}
serviceThrottling 设置得很高
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="True" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceThrottling maxConcurrentCalls="3000" maxConcurrentSessions="30000" maxConcurrentInstances="3000" />
</behavior>
希望遇到此类问题的人能提示一下是什么问题,或者至少给出建议还有什么地方可以挖掘
【问题讨论】:
-
“没有结果”是什么意思?你有错误吗?
-
我的意思是服务器接受缓慢的新请求,我无法解决这个问题
-
是什么让您认为它不会接受新请求?我看不到任何会使
loadConcurency失败的代码。如果需要,您需要对其进行编码。 -
它接受新的请求,问题不是它不能处理101并行请求,问题是当你需要同时开始处理101请求时慢