WCF服务路由,瓶颈?

2024-03-20

我们的应用程序服务器体系结构经过设置,以便每个服务调用都经过自定义构建的 WCF 服务路由器 - 一个使用请求消息标头中嵌入的信息将传入请求分发到适当服务的服务。

我们在使用此 WCF 服务路由器时遇到性能问题(对并发用户进行负载测试时超时)。我们想知道这是否是由于路由器中的错误、我们错误地配置了服务/IIS,或者是否是预期的情况 - 每个通过单个服务的调用听起来都像是一个潜在的瓶颈。

如果没有路由,我们可以在出现超时错误之前处理大约 120 个并发用户,尽管出现超时,但 IIS 仍会继续处理请求。使用路由器,IIS 将停止处理大约 20 个并发用户的请求,并且在负载测试的其余过程中永远不会恢复处理任何请求。

我们的主要问题是,在使用服务路由器时是否会出现这种情况,或者 IIS 是否能够按照我们设置的方式处理此负载?


路由服务如下所示:

/// <summary>
/// Generic service contract which can accept any WCF message.
/// </summary>
[ServiceContract]
public interface IServiceRouter
{
    [OperationContract(Action = "*", ReplyAction = "*", AsyncPattern=false)]
    Message ProcessMessage(Message requestMessage);
}

实施:

[ServiceBehavior( 
    InstanceContextMode = InstanceContextMode.PerCall,
    ConcurrencyMode = ConcurrencyMode.Multiple,
    AddressFilterMode = AddressFilterMode.Any, 
    ValidateMustUnderstand = false)]
public sealed class ServiceRouter : IServiceRouter

ProcessMessage操作:

    public Message ProcessMessage(Message requestMessage)
    {            
        //Figure out the url of the downstream service             
        string serviceName = requestMessage.Headers.GetHeader<String>(ServiceNameMessageHeader, String.Empty);
        string url = String.Format(_destinationUrlFormat, _destinationAppName, _destinationAppVersion, serviceName);
        EndpointAddress endpointAddress = new EndpointAddress(url);

        using (ChannelFactory<IServiceRouter> factory = new ChannelFactory<IServiceRouter>(_binding, endpointAddress))
        {
            factory.Endpoint.Behaviors.Add(new MustUnderstandBehavior(false));
            IServiceRouter proxy = factory.CreateChannel();

            using (proxy as IDisposable)
            {
                try
                {
                    IClientChannel clientChannel = proxy as IClientChannel;

                    // invoke service
                    Message responseMessage = proxy.ProcessMessage(requestMessage);

                    return responseMessage;
                }
                catch (Exception ex)
                {
                    // ...
                }
            }
        }
    }

不,不应期望 WCF 服务会给您带来如此大的瓶颈,但是当我们不确切知道您的 WCF 服务的用途或配置方式时,很难给出确切的答案,但正如您所说:

如果没有路由,我们之前可以处理大约 120 个并发用户 收到超时错误,尽管我们收到超时,但 IIS 仍保留 处理请求。使用路由器,IIS 停止处理请求 大约有 20 个并发用户,并且永远不会恢复处理任何请求 整个负载测试的其余部分。

我认为您已经回答了有关 WCF 服务导致问题的问题。显然,您需要检查它的配置、运行方式以及它对“路由”的作用。

edit

看一看here http://blogs.msdn.com/b/stcheng/archive/2009/01/06/wcf-things-that-will-impact-concurrency-capacity-behavior-of-wcf-service-with-simoultaneous-client-requests-connections.aspx一些可能影响 WCF 性能的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WCF服务路由,瓶颈? 的相关文章

  • 如何在 VS2017/2015 中打开 .xproj 文件

    我有一个带有扩展名的 NET core 项目 xproj 当我在VS 2017中打开项目时 项目文件 xproj migrated to csproj 如何打开 xproj 文件 Visual Studio 2017 2015 我需要安装任
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 如何根据给定的点生成热图

    我想生成 Windows 形式的热图 我有一组点作为输入 如何以最简单的方式做到这一点 谢谢 基于此处已有的答案 此方法允许您指定Colors您希望用作最大和最小颜色 private Color HeatMapColor double va
  • 如何在C#背后的代码中动态创建数据模板并绑定TreeView分层数据

    我有一个场景 其中树视图动态更改其数据模板和数据绑定定义 我在 XAML 中创建了一个树视图 如下所示
  • NuGet:包含 .pdb 文件并排除“Content”文件夹

    我已将以下行合并到 CI 构建中在每个构建上创建一个私有 NuGet 包 nuget pack C Projects Test Test vbproj OutputDirectory nas1 NuGet The 读取AssemblyInf
  • Winforms 中的 WPF ElementHost 最大化时崩溃 (Windows)

    我正在尝试将新的 WPF 控件集成到现有的 WinForms 应用程序中 并使用 ElementHost Dock Fill 来托管以下 XAML UserControl NET 4 当我将 WinForm 设置为最大化时 我的整个操作系统
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • Coldfusion 10、IIS 7.5 - 即使文件存在也收到 404

    即使该页面存在于磁盘上 我也收到 404 错误 我已经运行了 Web 服务器配置工具并重新启动了几次 cfm 文件的处理程序映射 配置工具似乎有效 C ColdFusion10 config wsconfig 1 isapi redirec
  • 是否可以在 IIS7 Express 中使用自定义主机标头/绑定?

    我正在尝试配置一个新的ASP NET MVC3 using IIS7快递 在我的本地开发机器上 使用自定义域名 eg 我的本地开发机器 打开我的网络浏览器 goto http dev www mydomain com http dev ww
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • Python 从同一包中的文件导入 __init__.py 中的类

    我觉得我应该知道这一点 因为我已经用 Python 编程这么久了 但我一直在不断学习关于这种精美语言的新知识 我的问题 很可能是重复的 但我无法找到相同的案例 是这样的 我有这样的文件布局 websocket init py client
  • 带有 QML 的 FbxGeometryLoader

    我想将 fbx 文件导入到我的Scene3D https doc qt io qt 5 11 qml qtdatavisualization scene3d html 通过QMesh https doc qt io qt 5 11 qt3d
  • Linux下与CashCode纸币接受器通信

    我已经实现了 CCNET 协议 以便通过 Linux 上的软件与 CashCode 纸币接受器进行通信 最初 我花了很多时间试图弄清楚为什么设备不响应 我发送的命令 使用反复试验的方法 我找到了为串行端口设置以下选项的解决方案 stty F
  • 我可以在不注销的情况下获得更新的 emailVerified 吗?

    我的注册流程如下 用户填写详细信息并注册 收到发送验证电子邮件 该用户登录后 但看到一个屏幕 要求进行电子邮件验证 用户验证他们的电子邮件并返回应用程序 在这个阶段我怎样才能获得新的用户数据emailVerified字段而不注销用户 我期望
  • Linux:大型 int 数组:mmap 与查找文件?

    假设我有一个数据集 它是存储在 4TB HDD ext4 文件系统上的文件中的 1e12 32 位整数 4 TB 数组 考虑到数据很可能是随机的 或者至少看起来是随机的 pseudo code for long long i 0 i lt
  • ElasticSearch 聚合可以做 SQL 可以做的事情吗?

    在 Elasticsearch 中 我需要获取从最高到最低出现最频繁的颜色的频率和数量 如果我有这样的数据 id name 1 blue 2 blue 3 green 4 yellow 5 blue 6 yellow 7 purple 8
  • 我可以将服务注入到 Grails 的过滤器中吗?

    我有一项服务可以在会话中获取和设置用户 如果有登录用户 我想将一些用户信息传递给每个视图 并认为过滤器是最好的方法 这样我就不必在每个控制器 操作中重复该信息 当我运行该应用程序时 出现以下错误 Error creating bean wi
  • 如何在所有字段名称中过滤 C# dataGridView?

    I see 在这个视频中 http www youtube com watch v 2h7C IL FB8添加文本框并让它驱动 datagridView 的过滤非常容易 问题在于该视频中 您似乎必须指定要根据哪一列进行过滤 RowFilte
  • 错误:“getGamesClient() 未定义” - 尝试运行 Google 的示例游戏

    我正在尝试运行 Google Game Play Services 示例here https github com playgameservices android samples tree master 8BitArtist 我已按照指示
  • 为温莎城堡中的所有接口实现注册拦截器

    我对温莎城堡相当陌生 特别是使用拦截器 我想知道是否可以在特定接口的所有实现中注册拦截器 而无需依次指定每个实现 例如 我有一个名为IComponent这将由许多班级实施 我有一个ComponentInterceptor编写的类在这些类执行
  • java中线程池的类型[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 java中的线程池有哪几种类型 我需要实现一个强大的多线程应用程序 该应用程序使用大量计算 我应该使用哪个线程池 java中有多种线程
  • 在 Spree (RoR) 中保存产品时,价格会乘以 100

    我在 Rails 3 1 3 和 Ruby 1 9 3 之上安装了在线购物框架 Spree 我还使用 Spree i18n gem 来本地化商店 现在 每当我保存产品时 价格都会乘以 100 例如 在管理区域中 我输入价格 3 20 结果是
  • String.split() *不*用于正则表达式?

    Since String split 使用正则表达式 这个片段 String s str str argh s split r 产量 s t s t a g h 分割这个字符串的最优雅的方法是什么r 序列 以便它产生 st st argh
  • Java EE7 中的多个 Web 套接字端点或单个 Web 套接字端点哪个更好

    Java EE 7 允许您通过注释非常轻松地创建新端点 但是 我想知道使用多个端点来处理每种消息类型是一个好主意 还是应该只使用一个端点外观来处理所有内容 我倾向于拥有一个单一端点外观 其理论基础是每个端点都会创建一个到客户端的新套接字连接
  • 如何在没有通用视图的 post_save_redirect 参数的情况下重定向到 Django 中新创建的对象

    我正在尝试将用户重定向到新创建的对象object get absolute url 保存表格后 我没有使用通用视图 所以我不能使用post save redirect争论 的相关部分view就像这样 if form is valid for
  • MemorySharp 设置地址偏移量不起作用

    好的 我正在使用MemorySharp用于读取 写入游戏内存的库 我的问题是 当我尝试将偏移量添加到基指针地址时 Visual Studio 在运行时会引发错误 这是基本代码 using var m new MemorySharp Appl
  • 无法比较飞行中的 ping 时间

    我尝试以下命令失败 sdiff lt ping www nato int lt ping www reuters com 有什么办法可以实时比较 ping 时间吗 通常我只是并排打开两个 xterm 然后在每个 xterm 中运行 ping
  • 使用可滚动结果集在休眠中批量读取数据

    我正在阅读一篇关于使用休眠进行批量获取的博客http java dzone com articles bulk fetching hibernate http java dzone com articles bulk fetching hi
  • 编译错误:Lambda 目标类型交集类型

    public class X Object o I J gt interface I public void foo interface J public void foo public void bar Oracle 编译器抛出错误 X
  • WCF服务路由,瓶颈?

    我们的应用程序服务器体系结构经过设置 以便每个服务调用都经过自定义构建的 WCF 服务路由器 一个使用请求消息标头中嵌入的信息将传入请求分发到适当服务的服务 我们在使用此 WCF 服务路由器时遇到性能问题 对并发用户进行负载测试时超时 我们