开发人员需要知道绑定的性能和可扩展性特点。当你在与现实中的应用程序打交道时,性能和可扩展性对服务层次的协议和用户体验很重要。用户会对性能表现差的应用抱怨。应用通常不扩展意味着商业对象的需求没有被满足。
我们已经对WCF中的四个绑定做了简单的性能比较。测试就是一个简单的返回一个256字符串的操作。列表4.23显示了用来在每个绑定间比较性能的服务。
列表4.23 性能测试服务
public class PerformanceTestService : IPerformanceTestService { private static string String256; static PerformanceTestService() { String256 = "".PadRight(256, 'x'); } public string Get256Bytes() { return String256; } }
服务在四个不同的绑定上暴露出来: netNamedPipeBinding, netTcpBinding, wsHttpBinding和basicHttpBinding.一个测试客户端依次调用Get256Bytes操作50,000次来比较绑定间的不同。然后我们测量平均使用时间,每秒多少次操作和CPU时间。所有的测试都在一个运行着服务端和客户端的单一工作环境中进行。这样以便于我们可以比较所有绑定的性能。图片4.3显示了每个绑定的平均反应时间。你可以使用反馈时间管理来帮助检查用户体验。
图片4.4显示了每个绑定每秒的平均操作数量。这个测量在吞吐量上有影响。在测试客户端仅有一个实例用来测试。如果使用多个客户端,那么就会实现额外的吞吐量。每秒有多少次操作是我们用来确定可扩展性的依据。
可扩展性也应该考虑每次操作所使用的硬件资源。图片4.5尝试通过显示每个操作的消耗来比较可扩展性。MCycles是一种基于对每个操作使用的CPU处理能力的测量方式。为了这个测试目的,我们使用一台Dell 4700, 奔腾4 3.4GHZ处理器的PC,等同于3400MCycles.注意对ws2007HttpBinding,wsHttpBinding和basicHttpBinding绑定的测量相对netTcpBinding或者netNamedPipeBinding绑定有很高的消耗。这是因为需要经常性的交互。
WCF开发组已经发布了一个关于WCF性能的白皮书(http://msdn2.microsoft.com/en-us/library/bb310550.aspx ).这个白皮书探讨了更多安全设置,诸如事务,消息和混合模式,也对先前的技术比如.NET Remoting,Web Service Enhancements,ASP.NET Web Services和Enterprice Services进行了深入探讨。