Online documentation - WebsydianExpress v3.5 |
Site specific callback point implemented by the handling of web service requests.
When the runtime has identified a request as being a web service request, it identifies a service processor that can perform the identification of the service handler that will perform the actual handling of the received data. This identification is done based on the URL that has been specified for the request.
The FindServiceProcessor is called after the WebsydianExpress runtime has performed the standard identification of the service processor to call, before the service processor is called.
If no value is specified for the output field ServiceProcessorImplName, the runtime will not call any service processor.
Please note that any program specified must have the interface that is defined by the WSYAPI/Abstract.ServiceProcessor function. If you specify a value for the field, this identifies the program that will be called.
If you do not specify anything in the output field ServiceURLSurrogate, the program specified by the ServiceProcessorImplName parameter will be called. But as no URL element has been specified, the default resolving of the selection criteria based on the service structure can't be used. You will have to create your own logic for selecting a service handler and the calling of the handler in the program specified by the ServiceProcessorImplName parameter.
If you specify Yes for the parameter IntranetOnly, and the request has not originated in the intranet, an error will be returned to the client.
The input to the callback function contains the same three fields, the values specified in these fields are the ones that either the runtime or the previously called callback function have specified.
It is always the last callback function to be called that will determine the final result. It is up to the callback function to decide whether it will take the input into account.
One case could be if it is necessary that all services are provided on the same URL (maybe because this makes it easier to setup special access for the services).
This means that the "normal" way of finding a service processor can't be used - as it uses a part of the URL to identify the URL element.
An alternative way to identify the service processor to call is to use a specific http-header.
All http-requests contain a number of http-headers. These http-headers are name-value pairs. In addition to the standard headers (e.g. Content-type, Content-length), you can specify other custom headers. You might for example specify that the http-header "ServiceProcessorSelect" is used to specify the service processor to call.
This can be done in the following manner.
To have this functionality, you need to do two things:
When you create a URL element in the service structure you would normally specify a value for the URL extension that identifies the element. As the URL extension is not used in this case, you can just use this field for the value of the http header. So if you want to call the FileServiceProcessor for the case where ServiceProcessorSelect=FILE - you would specify the value FILE for the URL-Mask.
Create a callback function that inherits from: Callback.WebServer.FindServiceProcessor.AbstractCallbackFunction.
In this function, extract the http-header from the request. You can do this by calling WSYBASE/GetHeaderOrEnvironmentVariable - specify "ServiceProcessorSelect" for the EnvironmentProperty parameter.
After extracting the header, use the APIServer.WebServices.GetServiceURLsForSite API to read all the URL elements that has been specified for the site.
For each of these elements, compare the value of the field ServiceURLMask with the extracted header value.
After identifying the URL element that corresponds to the header, use the ServiceURLSurrrogate from this record to call the APIServer.WebServices.GetURLAndServiceProcessor API.
Use the output from this function to populate the CallbackOutput local variable.
Inherit from CallbackFunctions.CallbackPoints.WebServer.FindServiceProcessor.AbstractCallbackFunction to create a callback function that can be called by this callback point.
This local variable contains:
This local variable contains: