如果仅仅是“耗时”操作的话不可能出现这样的问题:Remoting服务器使用了ThreadPool机制,即使是Singleton对象也可以同时处理多个请求。产生问题的有两种可能:1. 你的Remoting对象各个方法之间有一定的互锁机制(lock),导致一个请求结束之前其它请求无法得到服务。如果是这样,可以检察你的互锁机制是否合理,(lock(this)是最简单,最浪费效率的做法);)2. func1进行的是“耗CPU”的操作。例如复杂的数学计算,这时候其它请求会因为的不到CPU时间而无法进行。可能可以通过在func1中修改先程优先级部分的解决问题,但这会导致func1的调用事件变得更长。根本的解决办法是改进算法,或者用更好的机器。另外,如果只是希望客户端不要长时间等待,可以用niwalker提到的异步调用。

解决方案 »

  1.   

    详细说一下应用
    我的应用是通过 .net remoting 来控制测量系统,同一个时刻只有一个远程用户可以对测量系统进行测量操作,其他用户在想测量时,应该立即得到信息"有其他***远程用户正在测量"
      

  2.   

    使用一个用于互斥操作的对象Object o = new Object();
    在进入耗时操作的时候,先判断:
    if (Monitor.TryEnter(o)) {
       try {
          //耗时操作
       } finally {
          Monitor.Exit(o);
       }  
    } else {
       return "有其他***远程用户正在测量";
    }