Archived

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

object invocation problem

Hello,

I have an application running on linux. The server is implemented as an IceBox service and is deployed using IcePack. The clients are also running on linux. Eveything is working fine.

I got a request to port the client to windows but the problem is that IcePack is curently not supported on that platform. Therefore I created a version of my client that uses direct binding instead of using the IcePack::Query facility.

On the server side I modified the service config to have the adapter listen on a specific port
<service kind="standard" entry="GConnectService:create">
  <adapters>
    <adapter name="${name}.Adapter" endpoints="ssl -p 12123">
      <object identity="${name}/Portal" type="::GConnect::Portal"/>
    </adapter>
  </adapters>

On the client side, my config file looks like this:
#
# Load the IceSSL plug-in
#
Ice.Plugin.IceSSL=IceSSL:create

#
# IceSSL configuration
#
IceSSL.Client.CertPath=/home/ib273036/src/ng/gserver/exp/certs
IceSSL.Client.Config=sslconfig.xml

#
# GConnect proxy
#
GConnect.Proxy = GConnect/Portal:ssl -p 12123

The server is started manually before the first client connect.
When the client connects, it get the proxy for the GConnect/Portal object successfully and it is able to invoke a method on that object.
The result of that method invocation is a proxy to another object (let's call it Connection).
Tis object is registered with the same adapter but when the client try to invoke a method on the Connection object, I get the following exception:
Proxy.cpp:1111: Ice::NoEndpointException:
no suitable endpoint available for proxy `3A1C5975-729C-4C6F-844B-A63B6EC40E61 -t @ GConnect.Adapter-GConnectIceBox.GConnect'

I can not figure out why this fails and if I'm doing something really stupid.
Any help would be appreciated.

Istvan

Comments

  • mes
    mes California
    Hi,

    When an object adapter is assigned an identifier, all of the proxies created by that adapter will be indirect (i.e., contain the adapter id, not explicit endpoints). If you need your Connection object to have a direct proxy, you will have to create a separate object adapter in your service to manage this object.

    By the way, if you only need client access to IcePack on Windows, you can use the attached MSVC project file to build the necessary DLL. You will need to copy the file to the src/IcePack directory and add it to the workspace, then set its project dependencies to Ice, IceBox and IceUtil.

    Take care,
    - Mark
  • when I build The icepack12d.dll follow your advice ,

    error report as follow:

    Configuration: IceUtil - Win32 Debug
    Compiling...
    Base64.cpp
    D:\Ice-1.2.0\Ice-1.2.0\src\IceUtil\Base64.cpp(94) : error C2065: 'back_inserter' : undeclared identifier
    Error executing cl.exe.

    icepack12d.dll - 1 error(s), 0 warning(s)


    ---my development platform--
    vc 6.0
    win2000 professional simplified chinese
    ice 1.20
  • You must use STLport with VC 6.0. The STL library that is included in VC 6.0 is too buggy. Please see the INSTALL.WINDOWS file for details.
  • yes,It's The problem.thank you.