【发布时间】:2016-10-24 18:20:21
【问题描述】:
我创建了非常简单的 WCF 服务器(控制台应用程序):
[ServiceContract]
public interface IalzFirst
{
[OperationContract]
string Hi();
}
public class alzFirst : IalzFirst
{
public string Hi()
{
var tid = (int)AppDomain.GetCurrentThreadId(); ;
Thread.Sleep(9000);
return String.Format("Hi from thread id = {0}",tid);
}
}
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://localhost:8123/hi");
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(alzFirst), baseAddress))
{
// Enable metadata publishing.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
// Open the ServiceHost to start listening for messages. Since
// no endpoints are explicitly configured, the runtime will create
// one endpoint per base address for each service contract implemented
// by the service.
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
}
}
他的客户:
class Program
{
static void Main(string[] args)
{
var srv = new alzService.IalzFirstClient();
var ret =srv.Hi();
for (int i = 1; i < 10000; i++)
{
var x = i;
Task<int> t = Task.Run(() =>
{
try
{
var result = srv.Hi();
Console.WriteLine("{0}-> {1}", x, result);
return x;
}
catch (Exception e)
{
Console.WriteLine("!!!!!!! --- Error--- !!! On step {0} : {1}",x, e.Message);
return 0;
}
});
}
Console.Write("!!!! 0 result = {0}",ret);
Console.Read();
}
}
如您所见 - 客户端创建 10 000 (-1) 个任务,因此我可以看到 WCF 服务器将创建多少线程。
但始终,在 WCF 服务器上的任何配置中,线程数最多为 80-82 个线程(在进程资源管理器中)——这意味着我有阈值 20*cpu 核心数(在我的情况下 = 4)。
我可以将线程数增加到 80 以上(在我的情况下)吗?
【问题讨论】:
-
非常感谢!添加具有 maxConcurrentCalls、maxConcurrentSessions 和 maxConcurrentInstances 的部分
后,问题已解决。再次感谢!!! -
随时发布您自己对问题的答案并将其标记为已接受或删除问题
标签: c# multithreading web-services wcf parallel-processing