WCF 服务和内部客户端的性能问题

Posted

技术标签:

【中文标题】WCF 服务和内部客户端的性能问题【英文标题】:Performance concern on WCF service and internal clients 【发布时间】:2015-08-19 05:11:10 【问题描述】:

在基于Asp.Net Mvc 的大型模块化Web 应用程序中,我实现了WCF 自托管机制来提供每个模块之间的通信。这对我来说是一个很好的做法,因为通过这种机制,模块变得独立并且没有任何直接引用。如果我的客户能够通过WCF 服务访问这些服务,那么下一个优势是外部应用程序或客户端。

机制是通过IoC功能从模块中搜索和注入服务,并使用BasicHttpBinding绑定类型托管它们。

服务的端点也配置在特定的 URL 和服务名称中(例如,考虑 MyService : http://localhost:8080/Services/MyService

我关心的是应用进程内部模块的通信性能,它们是同一台机器,IIS 中的同一进程,并且与外部客户端不同。

外部客户端和内部客户端在通信层之间是否有区别,或不它们被视为相同的行为?

如果,需要哪些功能来提高内部客户端的性能?

【问题讨论】:

【参考方案1】:

当您谈论外部客户端时,您必须尽可能地保持服务兼容,以便您可以使用 http 绑定,以便来自不同平台的客户端可以使用您的服务。

但是当您谈论内部客户端时,所有这些都使用 .Net,您可以处理不同的问题。您可以使用 tcp 绑定来提高性能,因为所有客户端都是内部的。

http 和 tcp 客户端之间存在明显的性能差异,您可以在此处查看基准:http://media.techtarget.com/TheServerSideNET/downloads/DotNet-WebSphere_Web_Services_Benchmark.pdf

因此,您可以通过接受 http 和 tcp 绑定的服务来提高性能,并设置您的内部客户端以通过 tcp 绑定来使用您的服务。

这里也有一个关于 tcp 和 http 绑定的好链接:TCP Vs. Http Benchmark

希望对你有帮助。

【讨论】:

+1 用于 TCP 绑定,请记住,由于某些问题,我无法为内部和外部客户端选择不同的绑定类型。他们两个应该是一样的。我在外部和内部测试了BasicHttpBinding 的服务。结果显示内部客户端的响应速度比外部客户端快 180 倍(2 ms/p.r.r(per.request.response) 与 360ms/p.r.r 相比)!哪些层或东西导致性能下降? 这是一个很难的问题,涉及一些变量,你甚至可以做一个跟踪或网络跟踪来找出外部调用发生了什么,但是内部客户端不需要解析你的 ip,也许不需要通过防火墙、代理等。这些东西会使您从外部客户端的呼叫速度变慢。

以上是关于WCF 服务和内部客户端的性能问题的主要内容,如果未能解决你的问题,请参考以下文章

wcf中的消息模式

Ignite 性能:如何调整 ignite 瘦客户端的缓存写入性能?

WCF的Restful和TCP方式调用性能比较

WCF实例上下文模式与并发模式对性能的影响

APP客户端的性能

多客户端的 HSQLDB 性能如何