Archived

This forum has been archived. Please start a new discussion on GitHub.

Problem With ICE BiDir in v2.1.0

Ice now supports bi-directional Connections. I have converted one of my Ice Connections to utilitize the bi directional connection, but encounter some problems.

my senerio.
2 servers A and B, and Client C.

Client C connects to Server A. Establish a callback to Server A. (As what is done in the example).
B Connects to Server A. Creates a DataObject Proxy and passed it to Server A.
Server A upon receiving the DataObject, passes it to Client C via the bidir callback.
Client C, upon receiving the DataObject, calls a function on the DataObject, and never returns.

Upon Debugging, it is found that the ICE Communication between Client C and Server B is already Established. Client C would Invoke The Function at Server B (which already returns) but for Client C, it Function never returns and all communication on Client C Just Hangs there.

Previously, Client C creates it own callback proxy to hand it to Server A and it works fine.

further debugging reveals that Client C is waiting for notification but Server B already writes the return through the communication channel.

Comments

  • marc
    marc Florida
    Most likely you have not enough threads configured. For dispatching callbacks using the new the bi-dir mechanism, the client-side thread pool is used (because the connection over which the callback is received is an outgoing connection that has been established from the client to the server).

    Try to increase the number of threads in the client-side pool with the properties Ice.ThreadPool.Client.Size and Ice.ThreadPool.Client.SizeMax. The default is just one thread.
  • Thanks! Its working now.