异步远程调用

时间:2008-08-14 04:35:17

标签: c# .net-3.5 .net-2.0 remoting rpc

我们有一个在单独的Windows服务中运行的远程单例服务器(让我们调用她的RemotingService)。 RemotingService的客户端是ASP.NET实例(很多)。

目前,客户端远程调用RemotingService并在服务RemotingService调用时阻塞。但是,远程服务变得越来越复杂(有更多的RPC调用和复杂的算法),asp.net工作线程被阻塞了很长时间(4-5秒)。

根据this msdn article,这样做不会很好地扩展,因为每个远程RPC都会阻塞一个asp.net工作线程。它建议切换到异步处理程序以释放asp.net工作线程。

  

异步处理程序的目的   是释放ASP.NET线程池   线程来处理其他请求   而处理程序正在处理   原始请求。

这看起来很好,除了远程调用仍然从线程池中占用一个线程。 这是与asp.net工作线程相同的线程池吗?

我应该如何将我的远程单例服务器转换为异步系统,以便释放我的asp.net工作线程?

我可能错过了一些重要信息,如果您还有其他事情要回答这个问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

使用ThreadPool的想法是通过它可以控制同步线程的数量,如果这些线程太多,那么线程池会自动管理等待更新的线程。

Asp.Net工作线程(AFAIK)不是来自线程池,不应该受到对远程服务的调用的影响(除非这是一个非常慢的处理器,并且你的远程处理功能非常占用CPU) - 在这种情况下,您计算机上的所有内容都会受到影响。

您始终可以在其他物理服务器上托管远程服务。在这种情况下,您的asp.net工作线程将完全独立于您的远程调用(如果在单独的线程上调用远程调用)。