Is there a way to provide access to the session[] from an XML-RPC
server?
I am currently writing an XML-RPC server in Rails, and am using layered
dispatching. Unfortunately, everything works great except session is
always null in the ActionWebService controllers.
Is it possible to get session[] working with layered dispatch in
ActionWebService?
In case anyone else spends a WEEK trying to get XML-RPC sessions
working like I did.
I combined another post in this Google group about HTTP authentication
with my approach. This uses 401 Basic authentication, and returns a
session_id which can be passed as a Cookie in subsequent requests. Not
completely XMLRPC stds-compliant, but works for Rails/Perl/Java.
The missing link was I have to call new(session) in my layered
dispatcher:
class RpcController < ApplicationController
wsdl_service_name ‘RPC’
web_service_dispatching_mode :layered
# Must use the {BLOCK} mode of layered dispatch, and explicitly
# pass the session ID into the new() method
web_service(:auth) { AuthService.new(session) }
end
Then, in apis/auth_service.rb:
class AuthService < XmlRpcService
web_service_api AuthAPI
# methods here…
end
And finally, my base XMLRPC ActionWebService class,
apis/xml_rpc_service.rb:
class XmlRpcService < ApplicationController
def initialize(session)
logger.debug “new=#{session}” @session = session
end
end
I setup all my layered WebService classes to inherit from this.
Just had to find the right combination of black magic…
-Nate
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.