Training
Module
Work with web services in Dynamics 365 Business Central - Training
Use SOAP and OData to read and update records, and handle UI interaction in Business Central.
This browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
A service contract carries metadata that defines how a service to handles channel messages.
A WS_SERVICE_CONTRACT carries metadata for a service to handle a WS_MESSAGE.
It has a WS_CONTRACT_DESCRIPTION and a function table. An application can optionally specify WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.
If a WS_CONTRACT_DESCRIPTION and a function table are not given, the application is required to specify WS_SERVICE_MESSAGE_RECEIVE_CALLBACK.
static WS_SERVICE_CONTRACT calculatorContract =
{
&calculatorContractDescription,
NULL,
&calculatorFunctions,
};
See the calculator example for details.
Contract Description
WS_CONTRACT_DESCRIPTION is metadata defining the type-contract of the service. Generated by wsutil.exe.
In terms of WSDL, a WS_CONTRACT_DESCRIPTION maps to a wsdl:portType. For each wsdl:portType in the WSDL document a separate WS_CONTRACT_DESCRIPTION will be generated.
A contract description is made up of one or more service operations. These operations are given as an array of WS_OPERATION_DESCRIPTION.
<wsdl:definitions xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsu="https://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soapenc="https://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="https://Example.org"
xmlns:wsa="https://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsp="https://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsap="https://schemas.xmlsoap.org/ws/2004/08/addressing/policy" xmlns:xsd="https://www.w3.org/2001/XMLSchema"
xmlns:msc="http://schemas.microsoft.com/ws/2005/12/wsdl/contract" xmlns:wsaw="https://www.w3.org/2006/05/addressing/wsdl"
xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/" xmlns:wsa10="https://www.w3.org/2005/08/addressing"
xmlns:wsx="https://schemas.xmlsoap.org/ws/2004/09/mex" targetNamespace="https://Example.org"
xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/">
<wsdl:portType name="ICalculator">
<wsdl:operation name="Add">
<wsdl:input wsaw:Action="https://Example.org/ICalculator/Add"
message="tns:ICalculator_Add_InputMessage" />
<wsdl:output wsaw:Action="https://Example.org/ICalculator/AddResponse"
message="tns:ICalculator_Add_OutputMessage" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
For details of wsdl:portType to WS_CONTRACT_DESCRIPTION conversion, see the WSDL output section.
Example: WS_CONTRACT_DESCRIPTION
static WS_CONTRACT_DESCRIPTION contractDescriptionICalculator =
{
WsCountOf(serviceOperationsICalculator),
serviceOperationsICalculator
};
Function Table
Function Table is a struct of function pointers representing each of the service operations in the service contract. The function table definition is also generated by wsutil.exe.
Example: Function Table
// Function Table
struct CalculatorServiceFunctionTable
{
AddOperation Add;
SubtractOperation Subtract;
};
// Populate the Function Table
static const CalculatorServiceFunctionTable calculatorFunctions = {Add, Subtract};
Using the WS_SERVICE_MESSAGE_RECEIVE_CALLBACK
WS_SERVICE_MESSAGE_RECEIVE_CALLBACK has a dual mutually exclusive role.
If a WS_CONTRACT_DESCRIPTION is specified on the WS_SERVICE_CONTRACT, this becomes the default message handler for all the actions which are not supported by the specified WS_CONTRACT_DESCRIPTION. Otherwise, if WS_CONTRACT_DESCRIPTION is not specified on the WS_SERVICE_CONTRACT, and the WS_SERVICE_MESSAGE_RECEIVE_CALLBACK is specified on the WS_SERVICE_CONTRACT all in coming messages are passed to this callback.
For more examples, please see
The following callbacks are part of the contract:
The following structures are part of the contract:
Training
Module
Work with web services in Dynamics 365 Business Central - Training
Use SOAP and OData to read and update records, and handle UI interaction in Business Central.