编写SOAP4R服务器
SOAP4R支持两种不同类型的服务器-
- 基于CGI/FastCGI(SOAP::RPC::CGIStub)
- 独立(SOAP::RPC::StandaloneServer)
本章详细介绍了编写独立服务器的过程。编写SOAP服务器涉及以下步骤。
第1步 - 继承SOAP::RPC::StandaloneServer类
要实现自己的独立服务器,您需要编写一个新类,该类将是SOAP::StandaloneServer的子类,如下所示:
class MyServer < SOAP::RPC::StandaloneServer
...............
end
注 –如果要编写基于FastCGI的服务器,则需要将SOAP::RPC::CGIStub作为父类,其余过程将保持不变。
第2步-定义处理程序方法
第二步是编写您希望向外界公开的Web服务方法。它们可以写为简单的Ruby方法。例如,让我们编写两个加两个数字并将两个数字相除的方法-
class MyServer < SOAP::RPC::StandaloneServer
...............
# Handler methods
def add(a, b)
return a + b
end
def div(a, b)
return a / b
end
end
第3步-公开处理程序方法,下一步是将定义的方法添加到服务器。所述初始化方法用于暴露服务的方法与以下两种方法之一-
class MyServer < SOAP::RPC::StandaloneServer
def initialize(*args)
add_method(receiver, methodName, *paramArg)
end
end
这是参数的描述-
参数 |
说明 |
receiver |
包含methodName方法的对象。 您可以在与methodDef方法相同的类中定义服务方法,此参数为self。 |
methodName |
由于RPC请求而调用的方法的名称。 |
paramArg |
指定给定的参数名称和模式。 |
要了解的使用INOUT或出参数,可以考虑采用两个参数(inParam和inoutParam),返回一个正常的返回值(retVal的)和另外两个参数如下服务方法:inoutParam和outParam -
def aMeth(inParam, inoutParam)
retVal = inParam + inoutParam
outParam = inParam . inoutParam
inoutParam = inParam * inoutParam
return retVal, inoutParam, outParam
end
现在,我们可以公开此方法,如下所示:
add_method(self, 'aMeth', [
%w(in inParam),
%w(inout inoutParam),
%w(out outParam),
%w(retval return)
])
步骤4-启动服务器
最后一步是通过实例化派生类的一个实例并调用start方法来启动服务器。
myServer = MyServer.new('ServerName', 'urn:ruby:ServiceName', hostname, port)
myServer.start
这是必需参数的描述-
参数 |
说明 |
ServerName |
服务器名称,您可以提供最喜欢的服务器名称。 |
urn:ruby:ServiceName |
urn:ruby在这里是常数,但是您可以为此服务器指定唯一的ServiceName名称。 |
hostname |
指定此服务器将在其上侦听的主机名。 |
port |
Web服务要使用的可用端口号。 |
现在,使用上述步骤,让我们编写一个独立服务器-
require "soap/rpc/standaloneserver"
begin
class MyServer < SOAP::RPC::StandaloneServer
# Expose our services
def initialize(*args)
add_method(self, 'add', 'a', 'b')
add_method(self, 'div', 'a', 'b')
end
# Handler methods
def add(a, b)
return a + b
end
def div(a, b)
return a / b
end
end
server = MyServer.new("MyServer",
'urn:ruby:calculation', 'localhost', 8080)
trap('INT'){
server.shutdown
}
server.start
rescue => err
puts err.message
end
执行后,此服务器应用程序将在localhost上启动独立的SOAP服务器,并在端口 8080 上侦听请求。它公开一个服务方法add和div,该方法带有两个参数并返回结果。现在,您可以在后台运行此服务器,如下所示: