WCF并发&多线程客户端

时间:2017-06-19 12:19:40

标签: c# .net wcf concurrency

我有一个WCF,多线程客户端使用它来处理并行请求的数量。它以某种方式开始共享两个不同请求/线程的数据;我尝试更改InstanceContextModeConcurrencyMode,如下所示:

  • 默认InstanceContextMode = PerSession ConcurrencyMode = Single
  • InstanceContextMode = PerCall ConcurrencyMode = Single
  • InstanceContextMode = PerCall ConcurrencyMode = Multiple

但到目前为止没有运气。没有可能导致此并发问题的共享变量和函数。根据MS文档PerCall为每个单个调用创建实例,并且它没有任何意义表明当实例拥有自己的私有内存堆栈时如何共享数据。

工作流: WCF,.Net Assembly 1和.Net Assembly 2有三个主要组件。有一个名为" Process" WCF,它接受一个字符串参数,并根据通过WCF完成的处理返回结构化对象。 WCF中没有实例变量;功能中的一切。此函数对字符串进行少量处理并将其转换为结构化对象,然后将其传递给Assembly 1的函数进行一些处理,然后使用反射的invoke方法将其传递给Assembly 2的函数。这是整个过程以某种方式混合两个不同并发调用的最终结果。

如果有人能帮忙解决这个问题,我将非常感激。

1 个答案:

答案 0 :(得分:0)

您是否要将这些请求并行执行,而不是按顺序执行?通过在配置文件中添加fuse.dev({ root: false }, server => { const app = server.httpServer.app; app.use('/api', jsonServer.router('db.json')); }); ,我没有遇到任何问题。我的配置如下所示:

serviceThrottling

如您所见,我可以拥有最多100个并行请求。我使用默认<system.serviceModel> <services> <service name="TeleEcgService.Service"> <endpoint address="" binding="basicHttpBinding" contract="TeleEcgService.IService"/> </service> </services> <behaviors> <serviceBehaviors> <behavior> <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions="1" maxConcurrentInstances="100"/> <!-- To avoid disclosing metadata information, set the values below to false before deployment --> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> <serviceDebug includeExceptionDetailInFaults="true"/> </behavior> </serviceBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https"/> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/> <bindings> <basicHttpBinding> <binding maxReceivedMessageSize="50000000"> <!-- <security mode="Transport"> </security> --> </binding> </basicHttpBinding> </bindings> </system.serviceModel> InstanceContextMode