I cannot have more than one SingleCall or Singleton object to activate on
server side in the same time / on different threads.
I have a stand-alone EXE:
static void Main(string[] args)
{
// Register channel and instance factory
ChannelServices.RegisterChannel (new TcpChannel (777));
RemotingConfiguration.RegisterWellKnownServiceType (
typeof (RemotingSample.ServerObject),
"ServerObject",
WellKnownObjectMode.SingleCall);
// Shut down on user input
System.Console.WriteLine("Starting. Hit <enter> to exit...");
System.Console.ReadLine();
}
The RemotingSample.ServerObject has the following method:
public int BounceInteger (int n)
{
int idThread = Thread.CurrentThread.GetHashCode();
Console.WriteLine ("Thread {0} working...", idThread);
Thread.Sleep (5000);
Console.WriteLine ("Thread {0} done work.", idThread);
return n;
}
A client obviously activates and calls this object (I am omitting
an interface IServerObject, it is exposed by ServerObject):
static void Main(string[] args)
{
ChannelServices.RegisterChannel (new TcpChannel ());
RemotingSample.IServerObject o =
(RemotingSample.IServerObject)Activator.GetObject (
typeof (RemotingSample.IServerObject),
@"tcp://buoyant:777/ServerObject");
Console.WriteLine ("Call began");
int x = o.BounceInteger (42);
Console.WriteLine ("Call ended: {0}", x);
}
When I run many clients at once, the calls are executed sequentially on
the server, and in the same thread. Clients are hanging in line...
I tried also compiling a service and moving the code from the server
sans "press enter to exit" to OnStart, to no avail.
I suppose that there should be some magic to enable thread pooling. There
were a lot of talks on Usenet about remoting and threading, and I got an
impression that threading worked automatically for everyone...
...But me! Help!!!
-kkm
You can read messages from the DOTNET archive, unsubscribe from DOTNET, or
subscribe to other DevelopMentor lists at http://discuss.develop.com.