Archived

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

Dynamic Ice and Blobject (revisited)

OK.. now on the other end of the system... trying to dispatch the event to subscribers... I'm getting collocation exceptions when I call ice_invoke on the subscriber proxy (again.. its a direct delegate).....

if I ice_colo(false) on the proxy, the ice_invoke call kills the thread making the call rather than throwing an exception.. so I have zero clue as to whats going on in this case

are there no debug dlls available for the C# interface so I can step into the code ??

Ideas why its not dispatching the invocation to the subscriber ??

Comments

  • mes
    mes California
    I'm not sure what you mean by "the ice_invoke call kills the thread making the call". Can you elaborate? Have you tried wrapping things in a try/catch block to trap System.Exception?
    are there no debug dlls available for the C# interface so I can step into the code ??
    We don't distribute the debug DLL for C#, but you can easily build one yourself by downloading and compiling the Ice for C# source distribution.

    Take care,
    - Mark
  • I'm working on a source build right now

    I've got the call wrapped in a try/catch, but the catch never gets hit, and I get a trace message that the thread died

    --- a little later

    debug dlls do the same thing.... the thread just dies without throwing an exception
  • ok -- more info :)

    got the debug dll working... had a release DLL in the GAC that had to be removed before it would see the debug DLLs

    new problem:
    with oneway proxy.. everything on the publishing side of the test works fine, but I never get the calls dispatched to the subscriber

    I switched it to twoway, and the 1st publish hangs indefinitly

    in both cases, protocol traces DO show the requests going out

    traced it all the way down to TcpTransciever.read during a ConnectionI.validate call... getting a WouldBlock response
    >	icecs.dll!IceInternal.TcpTransceiver.read(IceInternal.BasicStream stream = {IceInternal.BasicStream}, int timeout = -1) Line 207	C#
     	icecs.dll!Ice.ConnectionI.validate() Line 93 + 0x1c bytes	C#
     	icecs.dll!IceInternal.OutgoingConnectionFactory.create(IceInternal.Endpoint[] endpoints = {Length=1}, bool compress = false) Line 278	C#
     	icecs.dll!IceInternal.DirectReference.getConnection(bool comp = false) Line 1050 + 0x10 bytes	C#
     	icecs.dll!Ice._ObjectDelM.setup(IceInternal.Reference rf = {IceInternal.DirectReference}) Line 1166 + 0x10 bytes	C#
     	icecs.dll!Ice.ObjectPrxHelperBase.__getDelegate() Line 713	C#
     	icecs.dll!Ice.ObjectPrxHelperBase.ice_invoke(string operation = "callme", Ice.OperationMode mode = Idempotent, byte[] inParams = {Length=0}, byte[] outParams = {Length=0}, Ice.Context context = {Ice.Context}) Line 208 + 0x8 bytes	C#
     	icecs.dll!Ice.ObjectPrxHelperBase.ice_invoke(string operation = "callme", Ice.OperationMode mode = Idempotent, byte[] inParams = {Length=0}, byte[] outParams = {Length=0}) Line 197 + 0x39 bytes	C#
     	blizardmaster.dll!BlizardMaster.TopicI.invoke_subs(Blizard.Invocation data = {Blizard.Invocation}) Line 104 + 0x1d bytes	C#
    
    Am I hitting a deadlock here because both publisher and subscriber are in the same app ??
  • benoit
    benoit Rennes, France
    This is strange, I really doubt there's anything in Ice which could kill the calling thread :confused:. Can you perhaps provide a small compilable example that demonstrates the problem? Also, can you give more details on your environment (version of .NET or mono, Ice for C# version, platform, etc)?

    Thanks!

    Benoit.
  • benoit
    benoit Rennes, France
    Try to increase the server thread pool size by setting the Ice.ThreadPool.Server.Size property to a value larger than 1. I suspect your application is running out of threads (non collocated calls are dispatched by the server thread pool.)

    Hope this helps!

    Benoit.
  • ok -- upping the threads got me a little further along... it dispatched a couple of invocations (one of them apparently a retry after exception) which went all the way through to the implementation.. then popped an UnknownUserException in Incoming.invoke... in the finally clause where it tests locator/servant/status.... at that point>
    locator was undefined
    servent contained and instance of the implementation
    status was DispatchOK

    (doesnt look like that code should have thrown an exception.. should have just continued on to process the "void" return type of the method)

    VS.Net 2003 with IceCS-2.1.0 debug dll from source build
  • forget it and thanks so much for the help !!

    I had one of my methods in the routing code defaulting to return false which caused the ice_invoke on my publisher object to return false.. which made the runtime very unhappy :)

    looks to all be working now !!