SOAP business service is not functioning correctly with session enabled and customized business dispatch name
Currently we have an SOAP bussiness service "Calculator" in production and this "Calculator" service has following settings:
- Service class:
CustomPackage.Calculator
(ExtendsEnsLib.SOAP.Service
) - Service name: "Calculator"
- Basic settings -- Port 8088
Class DemoPackage.Caculator.CalculatorService Extends EnsLib.SOAP.Service
{
Parameter ADAPTER = "EnsLib.SOAP.InboundAdapter";
Parameter SERVICENAME = "CalculatorService";
Parameter NAMESPACE = "http://test.me/calculator";
Parameter SOAPSESSION = 1;
Method Init() [ WebMethod ]
{
IF '$G(%session)
{
$$$TRACE("%session is undefined")
}
ELSE
{
$$$TRACE("NewSession: "_$CASE($ISOBJECT(%session), 1:"True", 0:"False"))
Set %session.Data("value") = 0
}
}
}
Currently, when we call Init
method as shown above on http://localhost:8088/Calculator
, we got "%session is undefined" logged.
Product version: IRIS 2022.2
$ZV: IRIS for Windows (x86-64) 2022.2 (Build 368U) Fri Oct 21 2022 16:44:33 EDT
Greetings, When using the EnsLib.SOAP.InboundAdapter to provide the SOAP service on a dedicated TCP port one is bypassing the Web Gateway and hence %session is not available. (SOAP InboundAdapter docs)
If you use custom port there is no session, that's expected/by design.
A session (%session) is a %CSP.Session object that is available only when the SOAP service uses a standard request via a properly configured web server (apache, IIS, other), to configure it check the "EnableStandardRequests" setting in the Business Service, configure the Web Application and the web server (or use default namespace Web Application), then invoke the service via the web server port.
In my experience I prefer to use standard request via web server, in general there is no need or valid reason (I can think of) to use custom port, unless you need something very specific, for example you don't have a web server (so...no SMP, something very unusual...).
Enrico