in src/DurableSDK/PowerShellServices.cs [75:116]
public OrchestrationBindingInfo SetOrchestrationContext(
ParameterBinding context,
out IExternalOrchestrationInvoker externalInvoker)
{
externalInvoker = null;
OrchestrationBindingInfo orchestrationBindingInfo = new OrchestrationBindingInfo(
context.Name,
JsonConvert.DeserializeObject<OrchestrationContext>(context.Data.String));
if (_usesExternalDurableSDK)
{
Collection<Func<PowerShell, object>> output = _pwsh.AddCommand(SetFunctionInvocationContextCommand)
// The external SetFunctionInvocationContextCommand expects a .json string to deserialize
// and writes an invoker function to the output pipeline.
.AddParameter("OrchestrationContext", context.Data.String)
.InvokeAndClearCommands<Func<PowerShell, object>>();
// If more than 1 element is present in the output pipeline, we cannot trust that we have
// obtained the external orchestrator invoker; i.e the output contract is not met.
var numResults = output.Count();
var numExpectedResults = 1;
var outputContractIsMet = output.Count() == numExpectedResults;
if (outputContractIsMet)
{
externalInvoker = new ExternalInvoker(output[0]);
}
else
{
var exceptionMessage = string.Format(PowerShellWorkerStrings.UnexpectedResultCount,
SetFunctionInvocationContextCommand, numExpectedResults, numResults);
throw new InvalidOperationException(exceptionMessage);
}
}
else
{
_pwsh.AddCommand(SetFunctionInvocationContextCommand)
.AddParameter("OrchestrationContext", orchestrationBindingInfo.Context)
.InvokeAndClearCommands();
}
_hasInitializedDurableFunctions = true;
return orchestrationBindingInfo;
}