有趣的是,第一次呼叫所花费的时间长度似乎与节点数量有关,即如果我停用一半节点,则时间减少(尽管不减半).此外,当在我的本地PC上运行的开发集群上运行完全相同的代码时,第一次呼叫所花费的时间通常是大约8秒,随后的呼叫采取<在任一系统上均为10毫秒.此外,在同一客户端进程中为同一服务创建另一个代理仍会导致快速调用时间,似乎代理工厂(我相信每个客户端进程的SF缓存)是在第一次使用代理时创建的,并且很长时间. 有趣的是,没有抛出异常,服务实际上有效! 所以我的问题是,为什么在使用ServiceProxy.Create()创建的代理上第一次从一个服务调用到另一个服务需要这么长时间?
根据 The SF remoting docs(见下文,强调我的),ServiceProxy.Create是ServiceProxyFactory的包装器,第一个调用还涉及为后续调用设置工厂.ServiceProxyFactory is a factory that creates proxy for different remoting interfaces. If you use API ServiceProxy.Create for creating proxy, then framework creates the singleton ServiceProxyFactory. It is useful to create one manually when you need to override IServiceRemotingClientFactory properties. Factory is an expensive operation. ServiceProxyFactory maintains cache of communication client. Best practice is to cache ServiceProxyFactory for as long as possible.