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 服务和内部客户端的性能问题的主要内容,如果未能解决你的问题,请参考以下文章