WCF 服务是否使用多个线程来处理传入请求?

2024-03-22

如何确保 WCF 服务使用 ThreadPool 中的线程来处理传入消息?

目前简单的方法调用如“return null;”处理另一个请求时大约需要 45 秒

以下是我注释服务类别的方式:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.Single)]
    public partial class MyService : IMyService {
...
}

但是当我在任务管理器中观察进程时,它似乎正在使用恒定数量的线程。即使在负载下。


public ActionResult SelectDatabase(string param)
        {
            if (!String.IsNullOrEmpty(param))
            {
            try
            {
                MyServicece svc = new MyService();
                Database[] dbsArray = svc.GetDatabases(param);
                if (depsArray != null)
                    ViewData["depsArray"] = depsArray;

                return View();
            }
            catch (Exception exc)
            {
                // log here                
                return ActionUnavailable();
            }
        }

这是我的服务行为:

<?xml version="1.0"?>
<configuration>
  <runtime>

  </runtime>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="100" />
    </connectionManagement>
  </system.net>
  <system.serviceModel>
    <diagnostics performanceCounters="Default" />
    <bindings>      
      <netTcpBinding>
        <binding sendTimeout="00:02:00" receiveTimeout="00:02:00" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferPoolSize="2147483647">
          <security mode="None">           
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
    <behaviors>
      <endpointBehaviors>
        <behavior name="CrossDomainServiceBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyService.MyServiceBehavior">
          <serviceThrottling maxConcurrentCalls="100"   maxConcurrentInstances="100" maxConcurrentSessions="100" />
          <dataContractSerializer maxItemsInObjectGraph="2147483646"/>
          <serviceMetadata httpGetEnabled="false" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service behaviorConfiguration="MyService.MyServiceBehavior" name="MyService.MyService">
        <endpoint address="MyService" binding="netTcpBinding" contract="AService.IAServ"  isSystemEndpoint="false" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
      </service>
      <service behaviorConfiguration="MyService.MyServiceBehavior" name="MyService.MyServiceAdmin">
        <endpoint address="MyServiceAdmin" binding="netTcpBinding" contract="MyService.IMyServiceAdmin"  isSystemEndpoint="false" />
        <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />        
      </service>
    </services>
  </system.serviceModel>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

这是我创建服务实例的方法:

ServiceHost myserviceHost = new ServiceHost(typeof(MyService), new Uri(String.Format("net.tcp://{0}/", _bindAddress)));
            myserviceHost.Open();
            Console.WriteLine(myserviceHost.BaseAddresses[0]);

InstanceContextMode 和 ConcurrencyMode 是不同的概念,但它们具有一定程度的相互作用 -我在博客上谈到了这个 http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,1efac821-2b89-47bb-9d27-48f0d6347914.aspx不久前在某个深度

WCF 调用在 IO 线程池线程上处理。假设你还没有做过类似的事情ConcurrencyMode.Single, InstanceContextMode.Single这将序列化对服务的每次调用,线程池管理器将尝试平衡线程数与工作速率。

如果并发请求的数量可以由 5 个线程提供服务,那么这就是它将使用的数量。您可能会发现线程池可以跟上您可以看到的线程数量的工作速率。您可以很高兴地使用比内核更多的线程,因为只要线程不纯粹受 CPU 限制,操作系统就可以在先前运行的线程启动 IO 时通过将线程切换到 CPU 来获得吞吐量。如果 CPU 完全耗尽,那么线程池管理器的启发式方法将使其不愿向线程池中添加更多线程

然而,还有另外几个潜在的问题:

  1. 当通过同一代理存在多个并发出站请求时,基于会话的绑定可能会在客户端阻塞。您没有说明如何生成多个请求,因此这可能是一个问题;
  2. 您可能还会看到限制,在 .NET 4 之前,默认最大并发请求数为 16,默认并发会话数为 10。这些值已在 .NET 4 中提高,但您没有说明是哪个版本您正在使用的 .NET
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF 服务是否使用多个线程来处理传入请求? 的相关文章

  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 为什么有些控件同时具有BackgroundImage和Image属性?

    为什么有些控件喜欢Button or PictureBox两者都有BackgroundImage and Image财产 为什么在按钮的情况下需要它们两个 或者为什么在图片框中背景图像应该可用 BackgroundImage继承自Contr
  • C# Winforms Designer 无法打开,因为它无法在同一程序集中找到类型

    我收到以下错误 找不到类型 My Special UserControl 请确保引用包含此类型的程序集 如果此类型是您的开发项目的一部分 请确保已使用当前平台或任何 CPU 的设置成功构建该项目 但没有任何意义的是My Special Us
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 将 2 个字节转换为整数

    我收到一个 2 个字节的端口号 最低有效字节在前 我想将其转换为整数 以便我可以使用它 我做了这个 char buf 2 Where the received bytes are char port 2 port 0 buf 1 port
  • 将 dll 注册到 GAC 或从 ASP.NET 中的 bin 文件夹引用它们是否更好

    如果答案是 视情况而定 您能否提供一个简短的解释 GAC 旨在包含以下组件跨多个应用程序共享 如果是这种情况 您应该对程序集进行强命名并向 GAC 注册 如果不是 请将程序集保留为私有程序集并将其作为项目 dll 引用进行引用 PS 没有真
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 创建WCF数据服务以在服务主机中使用

    我有一个服务应用程序 它通过不同的绑定托管多个 WCF 端点 我现在想在同一服务主机中托管 WCF 数据服务 这个帖子 https stackoverflow com questions 2926767 wcf data service h
  • 与 Entity Framework Core 2.0 的一对零关系

    我正在使用 C 和 NET Framework 4 7 将 Entity Framework 6 1 3 Code First 库迁移到 Entity Framework Core 我一直在用 Google 搜索 Entity Framew
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • 如何使用 z-index 进行相对定位?

    我有一个问题z index和我的代码 我想在每一行上都有一个弹出窗口 相对于该行定位 所以我创建了这段代码 level1 position relative z index 2 level2 position relative z inde
  • .htaccess:此处不允许使用 RewriteEngine

    我将 htaccess 上传到服务器并收到错误 500 内部服务器错误 在错误日志中我有以下错误 htaccess 此处不允许 RewriteEngine But mod rewrite so已启用 那么我需要改变吗
  • Android Textview斜体和wrap_contents

    我正在使用 3 个不同颜色的斜体文本视图
  • 将 Jar 文件与 -classpath JAVA 组合

    我有一个关于编译一个 Jar 文件中有一些依赖类的类的问题 MyJar jar 通过将目录树放入 classpath 选项中 例如 javac cp MyJar MyClass java 是检查所有子目录中的类还是仅检查目录树中的顶级类 提
  • 字节的二进制读取仅返回一个值。 C#

    当我期望 0 1 2 3 时 控制台显示 0 0 0 0 这是以下版本的修改版本 https msdn microsoft com en us library system io binarywriter v vs 110 aspx htt
  • 如何将 QTextTable 中的文本居中

    我正在使用 qt 框架开发应用程序 现在我想将表格数据保存为 pdf 我正在使用 QTextTable 和 QTextDocument 类 但是我无法将单元格中的文本居中 我该怎么做呢 感谢帮助 如果您想在插入文本时进行对齐 可以使用 Al
  • 将 JSON 反序列化为匿名对象

    在 C 中 我通过使用这样的代码成功地将匿名对象序列化为 JSON var obj new Amount 108 Message Hello JavaScriptSerializer serializer new JavaScriptSer
  • Asp.Net MVC - 具有两个相同类型列表的强类型视图

    我有一个强类型化到 Item 类的视图 在我的控制器中 我需要发送两个不同的列表 除了创建一个带有两个 List 的新类之外 还有更简单的方法可以做到这一点吗 我最终想要做的是在我的主页上有 10 个按日期排序的项目 以及 10 个按人气排
  • ReactJS 如何添加显示更多/显示更少按钮

    我是 React 新手 我想向我的应用程序添加一个简单的 显示更多 按钮 我有一个包含数据的数组 我想在其中默认显示 3 个条目 当用户点击show more 应呈现其余数据 并且按钮应将文本更改为show less 我不太确定该怎么做 这
  • 如何确定当前用户位置是否在我的 MKCooperativeRegion 内?

    我有一个坐标区域 我已确定该区域包含我想要为我的应用程序显示的内容的限制 我已将其设置为具有中心点纬度 经度和跨度的 MKCooperativeRegion 如何确定当前 userLocation 是否在我的坐标区域内 使用地图矩形 这是使
  • 检查数组是否包含重复值[重复]

    这个问题在这里已经有答案了 我想编写一个 JavaScript 函数来检查数组是否包含重复值 我编写了以下代码 但其给出的答案始终为 true 谁能告诉我我错过了什么 function checkIfArrayIsUnique myArra
  • 如何在 Docker 容器(Python、Flask 和 Redis)中启动自定义 RQ Worker

    我遵循 Miguel Grinberg 的优秀 Flask Mega 教程 成功设置了一个包含 Redis 任务队列和 RQ 工作线程的 Flask Web 应用程序 所有这些都在 Docker 容器中 为了提高任务队列性能 我现在需要使用
  • 如何在flutter中解析复杂的json

    我无法从复杂的 json 中获取数据 下面是请求中的 json results TotalRecordCount 1 Records code PCK 34333338365C93E2D50DB9C address 1 AV KHEIRED
  • Python 中的 Codewars Scramblies [重复]

    这个问题在这里已经有答案了 这是对代码战争臭名昭著的参考争夺 https www codewars com kata 55c04b4cc56a697bb0000048 train python我无法理解为什么我的简单代码性能缓慢 根据 co
  • 在 Java 中初始化复杂静态成员的最佳方法是什么?

    我的目标是拥有一个私人静态Properties我的类中的对象 在创建其他对象时充当默认值Properties我的应用程序所需的对象 当前的实现如下所示 public class MyClass private static Properti
  • 如何从UTF-8字符串的每个字符中获取UNICODE代码?

    使用 C 11 我如何从 UTF 8 编码std string 将文本每个字符的Unicode值放入一个uint32 t 就像是 void f const std string utf8 str for uint32 t code Do m
  • Facebook:图形 API 回调 / 实时 API / 公共 Feed API

    我正在开发一个社交媒体项目 我需要关注一些粉丝专页并收听该特定页面上发生的所有事情 我确实知道有一些数据经销商 例如GNIP http gnip com Datasift http datasift com 谁能给我提供这样的数据 我已经尝
  • OpenShift 自定义盒和 NPM

    我正在与一个社区开发的 OpenShift 卡带 https github com gsterjov openshift nginx cartridge对于 nginx 墨盒的构建脚本 无需任何修改 运行良好 它使用我提供的配置文件启动 n
  • Mobile Safari 点击事件“详细信息”属性始终为 1

    UIEvent detail https developer mozilla org en US docs Web API UIEvent detail属性应包含当前的点击计数 MDN 网络文档tells https developer m
  • WCF 服务是否使用多个线程来处理传入请求?

    如何确保 WCF 服务使用 ThreadPool 中的线程来处理传入消息 目前简单的方法调用如 return null 处理另一个请求时大约需要 45 秒 以下是我注释服务类别的方式 ServiceBehavior ConcurrencyM