Release v0.0.55
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
}
}
| Layer | Component | Default |
|---|---|---|
| Job execution budget | TransitionJobHandler via CancellationTokenSource | 300 s |
| Lock lease | AsyncTransitionStrategy | 330 s |
| Per-invocation Dapr ceiling | RemoteInvokerService | 60 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:
| Scenario | Action |
|---|---|
| Own 300 s budget expires | Run 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.
| Field | Default | Behavior |
|---|---|---|
rawResponse: false | ✅ default | Platform wraps output in standard response model |
rawResponse: true | — | Mapped 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:
| Field | Required | Default | Description |
|---|---|---|---|
url | Yes | — | Target SOAP endpoint URL |
soapAction | Yes | — | SOAPAction value |
soapVersion | No | "1.1" | "1.1" or "1.2" |
body | No | null | SOAP envelope template as raw XML string |
headers | No | null | Additional HTTP headers |
timeoutSeconds | No | 30 | Request timeout |
validateSsl | No | true | Server SSL certificate validation |
acceptedStatusCodes | No | — | HTTP 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:
| Method | Description |
|---|---|
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.
| Method | Return | Description |
|---|---|---|
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:
TransitionJobHandlerbudget,RemoteInvokerServiceper-invocation ceiling,JobTimeoutRecoveryService - vnext #646 — Functions
POST,PATCH,DELETEverb support +rawResponsefield
Summary
- SoapTask (Type
16) enables direct SOAP 1.1/1.2 web service integration;acceptedStatusCodesroutes HTTP 500 SOAP Faults throughOutputHandler. - Functions accept
POST,PATCH, andDELETE;rawResponse: truepasses 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_TIMEOUTincident is created, and the openInstanceTransitionis closed. - ScriptBase adds
ParseXml/XmlToStringfor safe XML handling in mapping scripts. - NotificationTask schema corrected:
configis now nested insideattributes.
See Also
- v0.0.55 Duyurusu — Feature-focused announcement in Turkish
vNext Runtime Platform Team
May 21, 2026
