Skip to main content

Release v0.0.55

· 5 min read
vNext Team
Burgan Tech Engineering

Overview

This release introduces SoapTask as a first-class task type for SOAP 1.1/1.2 web service integrations, expands Functions to support POST, PATCH, and DELETE verbs alongside GET, and adds a layered timeout model for workflow job execution that eliminates indefinitely stuck Busy instances. ScriptBase gains XML helper methods (ParseXml, XmlToString) to support SOAP response handling in mapping scripts. A new Deployment documentation section covers Helm chart installation and the Release Viewer tool. Transition Annotations receive documented platform-convention keys, and the View Concept guide is extended with the State View / Transition View interaction model. A schema correction moves NotificationTask configuration under attributes.


Features

Layered timeout model for workflow job execution (#680)

Workflow execution now enforces a configurable multi-layer timeout budget to prevent instances from remaining stuck in Busy status after pipeline failures.

New configuration class — WorkflowExecutionOptions:

{
"WorkflowExecution": {
"TransitionJobTimeoutSeconds": 300,
"TransitionJobLockLeaseSeconds": 330
},
"ExecutionApi": {
"InvocationTimeoutSeconds": 60
}
}
LayerComponentDefault
Job execution budgetTransitionJobHandler via CancellationTokenSource300 s
Lock leaseAsyncTransitionStrategy330 s
Per-invocation Dapr ceilingRemoteInvokerService60 s

Timeout recovery — JobTimeoutRecoveryService: When the job budget expires, the recovery service transitions the instance from Busy to Faulted, creates a JOB_EXECUTION_TIMEOUT incident, and closes any open InstanceTransition record. Recovery runs on a CancellationToken.None token so it completes regardless of the triggering cancellation.

Three-way cancellation handling in TransitionJobHandler:

ScenarioAction
Own 300 s budget expiresRun recovery + MarkAsProcessed
Dapr / external cancel (host up)Run recovery + MarkAsProcessed
Host shutdown (SIGTERM)Skip recovery, MarkAsProcessed only

result.IsSuccess is now checked after pipeline execution; previously JobCompleted was logged unconditionally, masking silent failures.

Reference: #680


POST, PATCH, and DELETE support for Functions (#646)

Function endpoints now accept POST, PATCH, and DELETE in addition to GET at both scope levels.

Domain-level:

GET /api/v1/{domain}/functions/{function}
POST /api/v1/{domain}/functions/{function}
PATCH /api/v1/{domain}/functions/{function}
DELETE /api/v1/{domain}/functions/{function}

Instance-level:

GET /api/v1/{domain}/workflows/{workflow}/instances/{instance}/functions/{function}
POST /api/v1/{domain}/workflows/{workflow}/instances/{instance}/functions/{function}
PATCH /api/v1/{domain}/workflows/{workflow}/instances/{instance}/functions/{function}
DELETE /api/v1/{domain}/workflows/{workflow}/instances/{instance}/functions/{function}

New rawResponse field on function definitions:

When rawResponse: true, the mapped rawData is returned directly as the HTTP response body instead of being wrapped in the platform's standard output model. This is designed for legacy API pass-through scenarios.

FieldDefaultBehavior
rawResponse: false✅ defaultPlatform wraps output in standard response model
rawResponse: trueMapped rawData returned as-is

Reference: #646


SoapTask — SOAP 1.1 / 1.2 web service calls (Type: 16)

A new task type for calling SOAP endpoints. Unlike HTTP Task, the request body is stored as a raw XML string to accommodate SOAP envelope templates.

Minimal definition:

{
"key": "get-customer-soap",
"version": "1.0.0",
"domain": "core",
"flow": "sys-tasks",
"flowVersion": "1.0.0",
"tags": ["soap"],
"attributes": {
"type": "16",
"config": {
"url": "https://api.example.com/services/CustomerService",
"soapAction": "http://example.com/GetCustomer",
"soapVersion": "1.1",
"acceptedStatusCodes": ["500"]
}
}
}

Configuration fields:

FieldRequiredDefaultDescription
urlYesTarget SOAP endpoint URL
soapActionYesSOAPAction value
soapVersionNo"1.1""1.1" or "1.2"
bodyNonullSOAP envelope template as raw XML string
headersNonullAdditional HTTP headers
timeoutSecondsNo30Request timeout
validateSslNotrueServer SSL certificate validation
acceptedStatusCodesNoHTTP error codes treated as success (e.g. ["500"] for SOAP Fault pass-through)

SOAP Fault responses typically arrive over HTTP 500. Setting acceptedStatusCodes: ["500"] lets the response reach OutputHandler where the fault can be inspected by the mapping script.

Mapping API on SoapTask:

MethodDescription
SetUrl(string)Override the target URL
SetBody(string?)Set body from a raw XML string
SetBody(XmlDocument?)Set body from XmlDocument.OuterXml
SetSoapAction(string)Override the SOAPAction value
SetHeaders(Dictionary<string, string?>)Replace all headers
AddHeader(string, string?)Add or update a single header
RemoveHeader(string)Remove a single header

The task response Data field contains the raw XML string returned by the service.


ScriptBase XML helpers

Two new methods on ScriptBase simplify XML handling in mapping scripts, primarily for SOAP Task output processing.

MethodReturnDescription
ParseXml(string? xmlString)XmlDocument?Parses an XML string. Returns null on null/empty input or parse failure — never throws
XmlToString(XmlDocument? xmlDoc)string?Converts XmlDocument to XML string. Returns null for null input
var doc = ParseXml(context.Body?.data?.ToString());
if (doc == null) { /* handle invalid XML */ }

var ns = new XmlNamespaceManager(doc.NameTable);
ns.AddNamespace("soap", "http://schemas.xmlsoap.org/soap/envelope/");
var fault = doc.SelectSingleNode("//soap:Fault", ns);

Breaking Changes

NotificationTask config moved inside attributes (#662 follow-up)

The NotificationTask (Type 10) schema structure changed. The config object must now be nested inside attributes:

Before:

{
"config": {
"type": "10",
"channels": ["sms", "email"],
"includeStateChannel": true
}
}

After:

{
"attributes": {
"type": "10",
"config": {
"channels": ["sms", "email"],
"includeStateChannel": true
}
}
}

This aligns NotificationTask with the standard task definition schema used by all other task types.


Configuration Updates

Configuration for v0.0.55:

{
"runtimeVersion": "0.0.55",
"schemaVersion": "0.0.42"
}

Note: Schema version 0.0.42 is unchanged from v0.0.54.


Issues Referenced

  • vnext #680 — Layered timeout model: TransitionJobHandler budget, RemoteInvokerService per-invocation ceiling, JobTimeoutRecoveryService
  • vnext #646 — Functions POST, PATCH, DELETE verb support + rawResponse field

Summary

  • SoapTask (Type 16) enables direct SOAP 1.1/1.2 web service integration; acceptedStatusCodes routes HTTP 500 SOAP Faults through OutputHandler.
  • Functions accept POST, PATCH, and DELETE; rawResponse: true passes mapped output directly to the caller, reducing BFF boilerplate.
  • Workflow job execution now has a 300 s budget. On timeout: instance moves to Faulted, a JOB_EXECUTION_TIMEOUT incident is created, and the open InstanceTransition is closed.
  • ScriptBase adds ParseXml / XmlToString for safe XML handling in mapping scripts.
  • NotificationTask schema corrected: config is now nested inside attributes.

See Also


vNext Runtime Platform Team
May 21, 2026