Service Builder Frequently Asked Questions
- How can I disable enumeration prefixing?
- How can I use a service that has a property named Type?
- How to consume 3rd-party SOAP Web Services?
- Why is not supplied the source for ROServiceBuilder and ROServiceTester?
How can I disable enumeration prefixing?
There's an option in the service builder, it's per enumeration and called Prefix enum values (Delphi Only)
, that allows you to decide if the enum will need prefixing or not.
Note: You should only disable prefixes if the enumeration's values are unique enough within Delphi.
How can I use a service that has a property named Type?
There's a menu option in Service Builder named Tools -> Escape Reserved Words in Identifiers
. If you select this, all reserved words (including Type
) should get escaped with three underscores (___Type
). This should solve the problem.
The three underscores are handled in a special way by the SOAP framework, so when building the actual SOAP request that gets sent out, they will be removed and the name in the data packet will be correct, i.e. Type
.
How to consume 3rd-party SOAP Web Services?
Using Web Services
Remoting SDK allows you consume third-party SOAP Web Services (with some limitations). Technically WSDL of Web Service is converted to RODL. This can be done using Service Builder.
Start Service Builder or use the Delphi IDE -> Tools -> Remoting SDK
and click Connect to SOAP Web Service...
During the import you have two options:
Enable special handling for .NET wrapped parameters
: This option allows importing Document/Literal services, so should stay set for most services.Create wrapper structures for nillable types
: This option, when set, creates anonymous types for fields that have aminOccurs=0
,maxOccurs=1
, ornillable=1
. By default this is off because a lot of services have fields that have this option set when they don't actually use this. Use this only whennil
is a valid option for simple types like Integers and Strings.
Once the service is imported, a new source file is generated that can be used like any other. During importing, the options imported from the WSDL are stored in this source file and override the options set on the SOAP Message used (like SoapMode and SerializationOptions). The generated file can be used like any normal Remoting SDK intf file to call remote services, with the (TRO)SoapMessage class as a message.
Writing Web Services
Writing Web Services is as easy as any other Remoting SDK Service. It's even possible to write a Remoting SDK based server application that can expose both Binary (for speed with Remoting SDK clients and SOAP (for compatibility with other libraries) at the same time, see Smart Services for more information on services that expose multiple message types.
To start, create a new project with one of the regular HTTP channels, with the SOAP Message type. Open the Service Builder via the Delphi IDE -> Tools -> Remoting SDK
and define your service. Once your service is done, open the main form, optionally set the SoapMode to document/literal to maximize compatibility with other implementations (Check SoapMode and SerializationOptions for the options on the SOAP Message classes). Implement your service, and you're set to go. Each service has it's own WSDL which is accessible by URL like
http://localhost:8099/SOAP?service=YourService
Why is not supplied the source for ROServiceBuilder and ROServiceTester?
ROServiceBuilder and ROServiceTester are built using many internal and third party libraries. Even if we did ship all the source, it would be extremely difficult for you to rebuild them successfully.