C# c中的WCF多线程调用#

C# c中的WCF多线程调用#,c#,multithreading,wcf,parallel-processing,C#,Multithreading,Wcf,Parallel Processing,我正在尝试调用WCF服务,您可以在这里看到: [ServiceBehavior(UseSynchronizationContext = false,ConcurrencyMode =ConcurrencyMode.Multiple)] public class InquiryService : IInquiryService { private DataContext _ctx; private IUserService _userServi

我正在尝试调用
WCF
服务,您可以在这里看到:

  [ServiceBehavior(UseSynchronizationContext = false,ConcurrencyMode =ConcurrencyMode.Multiple)]

    public class InquiryService : IInquiryService
    {
        private DataContext _ctx;
        private IUserService _userService;
        public InquiryService(DataContext ctx, INajaService najaService, IUserService userService)
        {
            _ctx = ctx;

            _userService = userService;
        }

        public Inquiryview Inquiry(string VisitDatetime, string Plaque)
        {

My service !!!!!
       }

}
WCF
webconfig

 <serviceThrottling maxConcurrentCalls="1000" maxConcurrentSessions="1000" maxConcurrentInstances="1000" />

下面是我调用服务的多线程程序:

private async void btnStart_Click(object sender, RoutedEventArgs e)
{
    btnStart.Content = "Please Wait...";
    btnStart.IsEnabled = false;

    await Task.Run(() =>
    {
        InquiryService service = new InquiryService();
        FinalList = new List<FinalData>();
        var items = Data.GetData(from, to).AsEnumerable();

        start = DateTime.Now;
        Parallel.ForEach(items, new ParallelOptions { MaxDegreeOfParallelism = threadCount }, item =>
         {
             string plaque = Plaque.GeneratePlaque(item.palll);

             var result = service.Inquiry(plaque);
             string serializedResult = new JavaScriptSerializer().Serialize(result);

             FinalData finalData = new FinalData()
             {
                 date = result.StartDate,
                 enddate = result.EndDate,
                 log = serializedResult,
                 plaque = plaque
             };

             lock (FinalList)
             {
                 FinalList.Add(finalData);

                 lock (lblCount)
                 {
                     Dispatcher.Invoke(() =>
                     {
                         lblCount.Content = FinalList.Count;
                     });
                 }
             }

             plaque = null;
         });

        end = DateTime.Now;
        duration = end - start;

        Dispatcher.Invoke(() =>
        {
            btnStart.Content = "Insert Data...";
        });

        Data.InsertData(FinalList);
    });

    btnStart.Content = "Start";
    btnStart.IsEnabled = true;

    MessageBox.Show("Service Response Time = " + duration.ToString());
}
private async void btnStart\u单击(对象发送方,路由目标)
{
btnStart.Content=“请稍候…”;
btnStart.IsEnabled=false;
等待任务。运行(()=>
{
InquiryService=新的InquiryService();
FinalList=新列表();
var items=Data.GetData(from,to).AsEnumerable();
start=DateTime.Now;
ForEach(items,新的ParallelOptions{MaxDegreeOfParallelism=threadCount},item=>
{
线状菌斑=菌斑。生成菌斑(项目。菌斑);
var结果=服务查询(牌匾);
string serializedResult=新的JavaScriptSerializer().Serialize(结果);
FinalData FinalData=新的FinalData()
{
日期=结果。开始日期,
enddate=result.enddate,
log=serializedResult,
斑块=斑块
};
锁(最终列表)
{
添加(finalData);
锁(lblCount)
{
Dispatcher.Invoke(()=>
{
lblCount.Content=FinalList.Count;
});
}
}
斑块=空;
});
end=DateTime.Now;
持续时间=结束-开始;
Dispatcher.Invoke(()=>
{
btnStart.Content=“插入数据…”;
});
Data.InsertData(FinalList);
});
btnStart.Content=“开始”;
btnStart.IsEnabled=true;
MessageBox.Show(“服务响应时间=“+duration.ToString());
}
调用服务的类:

私有内存流ms; 私有静态只读字符串ServiceHostName=“https://**.muservice.ir/InquiryService.svc”

公共查询服务()
{
ms=新内存流();
}
公众查询结果(字符串)
{
字符串结果\=”“;
ServicePointManager.ServerCertificateValidationCallback+=(se、cert、chain、sslerror)=>{return true;};
日期时间开始;
日期时间结束;
使用(var ClientRequest=new WebClient())
{
ClientRequest.Headers[“内容类型”]=“应用程序/json”;
ClientRequest.Encoding=Encoding.UTF8;
NetworkCredential credential1=新的网络凭据(“1”、“1”);
ClientRequest.Credentials=credential1;
start=DateTime.Now;
结果=ClientRequest。
(ServiceHostName+“/查询/2012-12-28”+“/”+斑块);
end=DateTime.Now;
}
var javascriptserializer=新的javascriptserializer();
Result temp=javascriptserializer.Deserialize(结果);
温度开始日期=开始;
temp.EndDate=结束;
返回温度;
}
在正确运行程序后(大约100毫秒),但在大约1000次请求后,我的请求时间增长到(8秒)。
我想知道我应该改变什么吗?

试试这种服务行为

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall,
                        ConcurrencyMode = ConcurrencyMode.Multiple)]

建议使用PerCall实例进行扩展。

最后在客户端的配置文件中添加此代码。因为windows有出站流量限制

<configuration>  
  <system.net>  
    <connectionManagement>  
      <add address="*" maxconnection="65456”/>  
    </connectionManagement>  
  </system.net>  
</configuration>


可能前1000个请求仍在处理中,因此下一个请求需要等待,直到前1000个请求中至少有一个请求完成。您是否在IIS上托管?使用探查器查看发生了什么,可能在1000个请求和大量未完成的请求累积之后,管道不太可能真正能够在没有任何序列化/排队的情况下并行执行1000个请求。@dlatikay是的,我正在使用IIS@dlatikay那么我应该更改任何配置设置吗?在里面wcf@danish那我该怎么办?
<configuration>  
  <system.net>  
    <connectionManagement>  
      <add address="*" maxconnection="65456”/>  
    </connectionManagement>  
  </system.net>  
</configuration>