From 19a8d8d4e5ac4baf46900f5541580b5cf9fb3de2 Mon Sep 17 00:00:00 2001
From: peterstone2017 <12449837+YunchuWang@users.noreply.github.com>
Date: Sat, 13 Dec 2025 12:10:37 -0800
Subject: [PATCH 1/9] Add ExceptionPropertiesSample demonstrating
IExceptionPropertiesProvider usage
---
.../CustomExceptionPropertiesProvider.cs | 45 +++++++
.../CustomExceptions.cs | 38 ++++++
.../ExceptionPropertiesSample.csproj | 26 ++++
samples/ExceptionPropertiesSample/Program.cs | 119 ++++++++++++++++++
samples/ExceptionPropertiesSample/README.md | 70 +++++++++++
samples/ExceptionPropertiesSample/Tasks.cs | 73 +++++++++++
6 files changed, 371 insertions(+)
create mode 100644 samples/ExceptionPropertiesSample/CustomExceptionPropertiesProvider.cs
create mode 100644 samples/ExceptionPropertiesSample/CustomExceptions.cs
create mode 100644 samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
create mode 100644 samples/ExceptionPropertiesSample/Program.cs
create mode 100644 samples/ExceptionPropertiesSample/README.md
create mode 100644 samples/ExceptionPropertiesSample/Tasks.cs
diff --git a/samples/ExceptionPropertiesSample/CustomExceptionPropertiesProvider.cs b/samples/ExceptionPropertiesSample/CustomExceptionPropertiesProvider.cs
new file mode 100644
index 00000000..7273d133
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/CustomExceptionPropertiesProvider.cs
@@ -0,0 +1,45 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using Microsoft.DurableTask.Worker;
+
+namespace ExceptionPropertiesSample;
+
+///
+/// Custom exception properties provider that extracts additional properties from exceptions
+/// to include in TaskFailureDetails for better diagnostics and error handling.
+///
+public class CustomExceptionPropertiesProvider : IExceptionPropertiesProvider
+{
+ ///
+ /// Extracts custom properties from exceptions to enrich failure details.
+ ///
+ /// The exception to extract properties from.
+ ///
+ /// A dictionary of custom properties to include in the FailureDetails,
+ /// or null if no properties should be added for this exception type.
+ ///
+ public IDictionary? GetExceptionProperties(Exception exception)
+ {
+ return exception switch
+ {
+ BusinessValidationException businessEx => new Dictionary
+ {
+ ["ErrorCode"] = businessEx.ErrorCode,
+ ["StatusCode"] = businessEx.StatusCode,
+ ["Metadata"] = businessEx.Metadata,
+ },
+ ArgumentOutOfRangeException argEx => new Dictionary
+ {
+ ["ParameterName"] = argEx.ParamName ?? string.Empty,
+ ["ActualValue"] = argEx.ActualValue?.ToString() ?? string.Empty,
+ },
+ ArgumentNullException argNullEx => new Dictionary
+ {
+ ["ParameterName"] = argNullEx.ParamName ?? string.Empty,
+ },
+ _ => null // No custom properties for other exception types
+ };
+ }
+}
+
diff --git a/samples/ExceptionPropertiesSample/CustomExceptions.cs b/samples/ExceptionPropertiesSample/CustomExceptions.cs
new file mode 100644
index 00000000..19e91f0a
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/CustomExceptions.cs
@@ -0,0 +1,38 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+namespace ExceptionPropertiesSample;
+
+///
+/// Custom business exception that includes additional properties for better error diagnostics.
+///
+public class BusinessValidationException : Exception
+{
+ public BusinessValidationException(
+ string message,
+ string? errorCode = null,
+ int? statusCode = null,
+ Dictionary? metadata = null)
+ : base(message)
+ {
+ this.ErrorCode = errorCode;
+ this.StatusCode = statusCode;
+ this.Metadata = metadata ?? new Dictionary();
+ }
+
+ ///
+ /// Gets the error code associated with this validation failure.
+ ///
+ public string? ErrorCode { get; }
+
+ ///
+ /// Gets the HTTP status code that should be returned for this error.
+ ///
+ public int? StatusCode { get; }
+
+ ///
+ /// Gets additional metadata about the validation failure.
+ ///
+ public Dictionary Metadata { get; }
+}
+
diff --git a/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj b/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
new file mode 100644
index 00000000..ac8e147f
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
@@ -0,0 +1,26 @@
+
+
+
+ Exe
+ net6.0;net8.0;net10.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/samples/ExceptionPropertiesSample/Program.cs b/samples/ExceptionPropertiesSample/Program.cs
new file mode 100644
index 00000000..d4feb9c8
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/Program.cs
@@ -0,0 +1,119 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+// This sample demonstrates how to use IExceptionPropertiesProvider to enrich
+// TaskFailureDetails with custom exception properties for better diagnostics.
+
+using ExceptionPropertiesSample;
+using Microsoft.DurableTask.Client;
+using Microsoft.DurableTask.Worker;
+using Microsoft.Extensions.Hosting;
+
+HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
+
+// Register the durable task client
+builder.Services.AddDurableTaskClient().UseGrpc();
+
+// Register the durable task worker with custom exception properties provider
+builder.Services.AddDurableTaskWorker()
+ .AddTasks(tasks =>
+ {
+ tasks.AddOrchestrator();
+ tasks.AddActivity();
+ })
+ .UseGrpc();
+
+// Register the custom exception properties provider
+// This will automatically extract custom properties from exceptions and include them in TaskFailureDetails
+builder.Services.AddSingleton();
+
+IHost host = builder.Build();
+
+// Start the worker
+await host.StartAsync();
+
+// Get the client to start orchestrations
+DurableTaskClient client = host.Services.GetRequiredService();
+
+Console.WriteLine("Exception Properties Sample");
+Console.WriteLine("===========================");
+Console.WriteLine();
+
+// Test case 1: Valid input (should succeed)
+Console.WriteLine("Test 1: Valid input");
+string instanceId1 = await client.ScheduleNewOrchestrationInstanceAsync(
+ "ValidationOrchestration",
+ input: "Hello World");
+
+OrchestrationMetadata result1 = await client.WaitForInstanceCompletionAsync(
+ instanceId1,
+ getInputsAndOutputs: true);
+
+if (result1.RuntimeStatus == OrchestrationRuntimeStatus.Completed)
+{
+ Console.WriteLine($"✓ Orchestration completed successfully");
+ Console.WriteLine($" Output: {result1.ReadOutputAs()}");
+}
+Console.WriteLine();
+
+// Test case 2: Empty input (should fail with custom properties)
+Console.WriteLine("Test 2: Empty input (should fail)");
+string instanceId2 = await client.ScheduleNewOrchestrationInstanceAsync(
+ "ValidationOrchestration",
+ input: string.Empty);
+
+OrchestrationMetadata result2 = await client.WaitForInstanceCompletionAsync(
+ instanceId2,
+ getInputsAndOutputs: true);
+
+if (result2.RuntimeStatus == OrchestrationRuntimeStatus.Failed && result2.FailureDetails != null)
+{
+ Console.WriteLine($"✗ Orchestration failed as expected");
+ Console.WriteLine($" Error Type: {result2.FailureDetails.ErrorType}");
+ Console.WriteLine($" Error Message: {result2.FailureDetails.ErrorMessage}");
+
+ // Display custom properties that were extracted by IExceptionPropertiesProvider
+ if (result2.FailureDetails.Properties != null && result2.FailureDetails.Properties.Count > 0)
+ {
+ Console.WriteLine($" Custom Properties:");
+ foreach (var property in result2.FailureDetails.Properties)
+ {
+ Console.WriteLine($" - {property.Key}: {property.Value}");
+ }
+ }
+}
+Console.WriteLine();
+
+// Test case 3: Short input (should fail with different custom properties)
+Console.WriteLine("Test 3: Short input (should fail)");
+string instanceId3 = await client.ScheduleNewOrchestrationInstanceAsync(
+ "ValidationOrchestration",
+ input: "Hi");
+
+OrchestrationMetadata result3 = await client.WaitForInstanceCompletionAsync(
+ instanceId3,
+ getInputsAndOutputs: true);
+
+if (result3.RuntimeStatus == OrchestrationRuntimeStatus.Failed && result3.FailureDetails != null)
+{
+ Console.WriteLine($"✗ Orchestration failed as expected");
+ Console.WriteLine($" Error Type: {result3.FailureDetails.ErrorType}");
+ Console.WriteLine($" Error Message: {result3.FailureDetails.ErrorMessage}");
+
+ // Display custom properties
+ if (result3.FailureDetails.Properties != null && result3.FailureDetails.Properties.Count > 0)
+ {
+ Console.WriteLine($" Custom Properties:");
+ foreach (var property in result3.FailureDetails.Properties)
+ {
+ Console.WriteLine($" - {property.Key}: {property.Value}");
+ }
+ }
+}
+Console.WriteLine();
+
+Console.WriteLine("Sample completed. Press any key to exit...");
+Console.ReadKey();
+
+await host.StopAsync();
+
diff --git a/samples/ExceptionPropertiesSample/README.md b/samples/ExceptionPropertiesSample/README.md
new file mode 100644
index 00000000..128cc41b
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/README.md
@@ -0,0 +1,70 @@
+# Exception Properties Sample
+
+This sample demonstrates how to use `IExceptionPropertiesProvider` to enrich `TaskFailureDetails` with custom exception properties for better diagnostics and error handling.
+
+## Overview
+
+When orchestrations or activities throw exceptions, the Durable Task framework captures failure details. By implementing `IExceptionPropertiesProvider`, you can extract custom properties from exceptions and include them in the `TaskFailureDetails`, making it easier to diagnose issues and handle errors programmatically.
+
+## Key Concepts
+
+1. **Custom Exception with Properties**: Create exceptions that carry additional context (error codes, metadata, etc.)
+2. **IExceptionPropertiesProvider**: Implement this interface to extract custom properties from exceptions
+3. **Automatic Property Extraction**: The framework automatically uses your provider when converting exceptions to `TaskFailureDetails`
+4. **Retrieving Failure Details**: Use the durable client to retrieve orchestration status and access the enriched failure details
+
+## What This Sample Does
+
+1. Defines a `BusinessValidationException` with custom properties (ErrorCode, StatusCode, Metadata)
+2. Implements `CustomExceptionPropertiesProvider` that extracts these properties from exceptions
+3. Creates a validation orchestration and activity that throws the custom exception
+4. Demonstrates how to retrieve and display failure details with custom properties using the durable client
+
+## Running the Sample
+
+```bash
+dotnet run --project ExceptionPropertiesSample
+```
+
+## Expected Output
+
+The sample runs three test cases:
+1. **Valid input**: Orchestration completes successfully
+2. **Empty input**: Orchestration fails with custom properties (ErrorCode, StatusCode, Metadata)
+3. **Short input**: Orchestration fails with different custom properties
+
+For failed orchestrations, you'll see the custom properties extracted by the `IExceptionPropertiesProvider` displayed in the console.
+
+## Code Structure
+
+- `CustomExceptions.cs`: Defines the `BusinessValidationException` with custom properties
+- `CustomExceptionPropertiesProvider.cs`: Implements `IExceptionPropertiesProvider` to extract properties
+- `Tasks.cs`: Contains the orchestration and activity that throw custom exceptions
+- `Program.cs`: Sets up the worker, registers the provider, and demonstrates retrieving failure details
+
+## Key Code Snippet
+
+```csharp
+// Register the custom exception properties provider
+builder.Services.AddSingleton();
+
+// Retrieve failure details with custom properties
+OrchestrationMetadata result = await client.WaitForInstanceCompletionAsync(
+ instanceId,
+ getInputsAndOutputs: true); // Important: must be true to get failure details
+
+if (result.FailureDetails?.Properties != null)
+{
+ foreach (var property in result.FailureDetails.Properties)
+ {
+ Console.WriteLine($"{property.Key}: {property.Value}");
+ }
+}
+```
+
+## Notes
+
+- The `getInputsAndOutputs` parameter must be `true` when calling `GetInstanceAsync` or `WaitForInstanceCompletionAsync` to retrieve failure details
+- Custom properties are only included if the orchestration is in a `Failed` state
+- The `IExceptionPropertiesProvider` is called automatically by the framework when exceptions are caught
+
diff --git a/samples/ExceptionPropertiesSample/Tasks.cs b/samples/ExceptionPropertiesSample/Tasks.cs
new file mode 100644
index 00000000..e919aad7
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/Tasks.cs
@@ -0,0 +1,73 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT License.
+
+using Microsoft.DurableTask;
+
+namespace ExceptionPropertiesSample;
+
+///
+/// Orchestration that demonstrates custom exception properties in failure details.
+///
+[DurableTask("ValidationOrchestration")]
+public class ValidationOrchestration : TaskOrchestrator
+{
+ public override async Task RunAsync(TaskOrchestrationContext context, string input)
+ {
+ // Call an activity that may throw a custom exception with properties
+ try
+ {
+ string result = await context.CallActivityAsync("ValidateInput", input);
+ return result;
+ }
+ catch (TaskFailedException ex)
+ {
+ // The failure details will include custom properties from IExceptionPropertiesProvider
+ // These properties are automatically extracted and included in the TaskFailureDetails
+ throw;
+ }
+ }
+}
+
+///
+/// Activity that validates input and throws a custom exception with properties on failure.
+///
+[DurableTask("ValidateInput")]
+public class ValidateInputActivity : TaskActivity
+{
+ public override Task RunAsync(TaskActivityContext context, string input)
+ {
+ // Simulate validation logic
+ if (string.IsNullOrWhiteSpace(input))
+ {
+ throw new BusinessValidationException(
+ message: "Input validation failed: input cannot be empty",
+ errorCode: "VALIDATION_001",
+ statusCode: 400,
+ metadata: new Dictionary
+ {
+ ["Field"] = "input",
+ ["ValidationRule"] = "Required",
+ ["Timestamp"] = DateTime.UtcNow,
+ });
+ }
+
+ if (input.Length < 3)
+ {
+ throw new BusinessValidationException(
+ message: $"Input validation failed: input must be at least 3 characters (received {input.Length})",
+ errorCode: "VALIDATION_002",
+ statusCode: 400,
+ metadata: new Dictionary
+ {
+ ["Field"] = "input",
+ ["ValidationRule"] = "MinLength",
+ ["MinLength"] = 3,
+ ["ActualLength"] = input.Length,
+ });
+ }
+
+ // Validation passed
+ return Task.FromResult($"Validation successful for input: {input}");
+ }
+}
+
From 4fd6d467da28d68e41177b736d59aaf7c8a9dab0 Mon Sep 17 00:00:00 2001
From: peterstone2017 <12449837+YunchuWang@users.noreply.github.com>
Date: Sat, 13 Dec 2025 12:28:50 -0800
Subject: [PATCH 2/9] fix
---
.../ExceptionPropertiesSample.csproj | 2 +
samples/ExceptionPropertiesSample/Program.cs | 49 ++++++++++++++++---
samples/ExceptionPropertiesSample/README.md | 14 ++++++
.../appsettings.json | 3 ++
4 files changed, 61 insertions(+), 7 deletions(-)
create mode 100644 samples/ExceptionPropertiesSample/appsettings.json
diff --git a/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj b/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
index ac8e147f..d24b2f47 100644
--- a/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
+++ b/samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
@@ -19,7 +19,9 @@
+
+
diff --git a/samples/ExceptionPropertiesSample/Program.cs b/samples/ExceptionPropertiesSample/Program.cs
index d4feb9c8..6d805ff8 100644
--- a/samples/ExceptionPropertiesSample/Program.cs
+++ b/samples/ExceptionPropertiesSample/Program.cs
@@ -5,23 +5,53 @@
// TaskFailureDetails with custom exception properties for better diagnostics.
using ExceptionPropertiesSample;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.DurableTask.Client;
+using Microsoft.DurableTask.Client.AzureManaged;
using Microsoft.DurableTask.Worker;
+using Microsoft.DurableTask.Worker.AzureManaged;
using Microsoft.Extensions.Hosting;
HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);
+string? schedulerConnectionString = builder.Configuration.GetValue("DURABLE_TASK_SCHEDULER_CONNECTION_STRING");
+bool useScheduler = !string.IsNullOrWhiteSpace(schedulerConnectionString);
+
// Register the durable task client
-builder.Services.AddDurableTaskClient().UseGrpc();
+if (useScheduler)
+{
+ builder.Services.AddDurableTaskClient(clientBuilder => clientBuilder.UseDurableTaskScheduler(schedulerConnectionString!));
+}
+else
+{
+ builder.Services.AddDurableTaskClient().UseGrpc();
+}
// Register the durable task worker with custom exception properties provider
-builder.Services.AddDurableTaskWorker()
- .AddTasks(tasks =>
+if (useScheduler)
+{
+ builder.Services.AddDurableTaskWorker(workerBuilder =>
{
- tasks.AddOrchestrator();
- tasks.AddActivity();
- })
- .UseGrpc();
+ workerBuilder.AddTasks(tasks =>
+ {
+ tasks.AddOrchestrator();
+ tasks.AddActivity();
+ });
+
+ workerBuilder.UseDurableTaskScheduler(schedulerConnectionString!);
+ });
+}
+else
+{
+ builder.Services.AddDurableTaskWorker()
+ .AddTasks(tasks =>
+ {
+ tasks.AddOrchestrator();
+ tasks.AddActivity();
+ })
+ .UseGrpc();
+}
// Register the custom exception properties provider
// This will automatically extract custom properties from exceptions and include them in TaskFailureDetails
@@ -39,6 +69,11 @@
Console.WriteLine("===========================");
Console.WriteLine();
+Console.WriteLine(useScheduler
+ ? "Configured to use Durable Task Scheduler (DTS)."
+ : "Configured to use local gRPC. (Set DURABLE_TASK_SCHEDULER_CONNECTION_STRING to use DTS.)");
+Console.WriteLine();
+
// Test case 1: Valid input (should succeed)
Console.WriteLine("Test 1: Valid input");
string instanceId1 = await client.ScheduleNewOrchestrationInstanceAsync(
diff --git a/samples/ExceptionPropertiesSample/README.md b/samples/ExceptionPropertiesSample/README.md
index 128cc41b..f1fba1d1 100644
--- a/samples/ExceptionPropertiesSample/README.md
+++ b/samples/ExceptionPropertiesSample/README.md
@@ -22,6 +22,20 @@ When orchestrations or activities throw exceptions, the Durable Task framework c
## Running the Sample
+This sample can run against either:
+
+1. **Durable Task Scheduler (DTS)** (recommended): set the `DURABLE_TASK_SCHEDULER_CONNECTION_STRING` environment variable.
+2. **Local gRPC endpoint**: if the env var is not set, the sample uses the default local gRPC configuration.
+
+### DTS
+
+Set `DURABLE_TASK_SCHEDULER_CONNECTION_STRING` and run the sample.
+
+```cmd
+set DURABLE_TASK_SCHEDULER_CONNECTION_STRING=Endpoint=https://...;TaskHub=...;Authentication=...;
+dotnet run --project ExceptionPropertiesSample
+```
+
```bash
dotnet run --project ExceptionPropertiesSample
```
diff --git a/samples/ExceptionPropertiesSample/appsettings.json b/samples/ExceptionPropertiesSample/appsettings.json
new file mode 100644
index 00000000..1aab2378
--- /dev/null
+++ b/samples/ExceptionPropertiesSample/appsettings.json
@@ -0,0 +1,3 @@
+{
+ "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": ""
+}
\ No newline at end of file
From 262d9fc259cacb4418fd4c0baeb91a646260dffb Mon Sep 17 00:00:00 2001
From: wangbill
Date: Sat, 13 Dec 2025 12:59:00 -0800
Subject: [PATCH 3/9] Potential fix for pull request finding 'Useless
assignment to local variable'
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
---
samples/ExceptionPropertiesSample/Tasks.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/ExceptionPropertiesSample/Tasks.cs b/samples/ExceptionPropertiesSample/Tasks.cs
index e919aad7..caafe886 100644
--- a/samples/ExceptionPropertiesSample/Tasks.cs
+++ b/samples/ExceptionPropertiesSample/Tasks.cs
@@ -19,7 +19,7 @@ public override async Task RunAsync(TaskOrchestrationContext context, st
string result = await context.CallActivityAsync("ValidateInput", input);
return result;
}
- catch (TaskFailedException ex)
+ catch (TaskFailedException)
{
// The failure details will include custom properties from IExceptionPropertiesProvider
// These properties are automatically extracted and included in the TaskFailureDetails
From 41ee8174b7407a95452fd7c0f6aafb25bc4562ae Mon Sep 17 00:00:00 2001
From: wangbill
Date: Sat, 13 Dec 2025 12:59:33 -0800
Subject: [PATCH 4/9] Update samples/ExceptionPropertiesSample/README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
samples/ExceptionPropertiesSample/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/ExceptionPropertiesSample/README.md b/samples/ExceptionPropertiesSample/README.md
index f1fba1d1..9b2d4ff2 100644
--- a/samples/ExceptionPropertiesSample/README.md
+++ b/samples/ExceptionPropertiesSample/README.md
@@ -37,7 +37,7 @@ dotnet run --project ExceptionPropertiesSample
```
```bash
-dotnet run --project ExceptionPropertiesSample
+dotnet run --project samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
```
## Expected Output
From 7320bad73db5fe2f02745e2c7a560540c35e321d Mon Sep 17 00:00:00 2001
From: wangbill
Date: Sat, 13 Dec 2025 12:59:51 -0800
Subject: [PATCH 5/9] Update samples/ExceptionPropertiesSample/Tasks.cs
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
samples/ExceptionPropertiesSample/Tasks.cs | 13 ++-----------
1 file changed, 2 insertions(+), 11 deletions(-)
diff --git a/samples/ExceptionPropertiesSample/Tasks.cs b/samples/ExceptionPropertiesSample/Tasks.cs
index caafe886..50c7d289 100644
--- a/samples/ExceptionPropertiesSample/Tasks.cs
+++ b/samples/ExceptionPropertiesSample/Tasks.cs
@@ -14,17 +14,8 @@ public class ValidationOrchestration : TaskOrchestrator
public override async Task RunAsync(TaskOrchestrationContext context, string input)
{
// Call an activity that may throw a custom exception with properties
- try
- {
- string result = await context.CallActivityAsync("ValidateInput", input);
- return result;
- }
- catch (TaskFailedException)
- {
- // The failure details will include custom properties from IExceptionPropertiesProvider
- // These properties are automatically extracted and included in the TaskFailureDetails
- throw;
- }
+ string result = await context.CallActivityAsync("ValidateInput", input);
+ return result;
}
}
From 1e8962dd4e78a80a41131692082abe134a8da6cf Mon Sep 17 00:00:00 2001
From: peterstone2017 <12449837+YunchuWang@users.noreply.github.com>
Date: Sat, 13 Dec 2025 13:04:49 -0800
Subject: [PATCH 6/9] sln
---
Microsoft.DurableTask.sln | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/Microsoft.DurableTask.sln b/Microsoft.DurableTask.sln
index 0ca1cad1..837a0ba0 100644
--- a/Microsoft.DurableTask.sln
+++ b/Microsoft.DurableTask.sln
@@ -93,6 +93,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScheduledTasks.Tests", "tes
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LargePayloadConsoleApp", "samples\LargePayloadConsoleApp\LargePayloadConsoleApp.csproj", "{6EB9D002-62C8-D6C1-62A8-14C54CA6DBBC}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ExceptionPropertiesSample", "samples\ExceptionPropertiesSample\ExceptionPropertiesSample.csproj", "{7C3ECBCE-BEFB-4982-842E-B654BB6B6285}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureBlobPayloads", "src\Extensions\AzureBlobPayloads\AzureBlobPayloads.csproj", "{FE1DA748-D6DB-E168-BC42-6DBBCEAF229C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InProcessTestHost", "src\InProcessTestHost\InProcessTestHost.csproj", "{5F1E1662-D2D1-4325-BFE3-6AE23A8A4D7E}"
@@ -261,6 +263,10 @@ Global
{6EB9D002-62C8-D6C1-62A8-14C54CA6DBBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EB9D002-62C8-D6C1-62A8-14C54CA6DBBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EB9D002-62C8-D6C1-62A8-14C54CA6DBBC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7C3ECBCE-BEFB-4982-842E-B654BB6B6285}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7C3ECBCE-BEFB-4982-842E-B654BB6B6285}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7C3ECBCE-BEFB-4982-842E-B654BB6B6285}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7C3ECBCE-BEFB-4982-842E-B654BB6B6285}.Release|Any CPU.Build.0 = Release|Any CPU
{FE1DA748-D6DB-E168-BC42-6DBBCEAF229C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE1DA748-D6DB-E168-BC42-6DBBCEAF229C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE1DA748-D6DB-E168-BC42-6DBBCEAF229C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -313,6 +319,7 @@ Global
{5F1E1662-D2D1-4325-BFE3-6AE23A8A4D7E} = {8AFC9781-F6F1-4696-BB4A-9ED7CA9D612B}
{B894780C-338F-475E-8E84-56AFA8197A06} = {E5637F81-2FB9-4CD7-900D-455363B142A7}
{6EB9D002-62C8-D6C1-62A8-14C54CA6DBBC} = {EFF7632B-821E-4CFC-B4A0-ED4B24296B17}
+ {7C3ECBCE-BEFB-4982-842E-B654BB6B6285} = {EFF7632B-821E-4CFC-B4A0-ED4B24296B17}
{FE1DA748-D6DB-E168-BC42-6DBBCEAF229C} = {8AFC9781-F6F1-4696-BB4A-9ED7CA9D612B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
From 113ed7d87b5b0a9c0d613d25d6801a5141bd58e5 Mon Sep 17 00:00:00 2001
From: peterstone2017 <12449837+YunchuWang@users.noreply.github.com>
Date: Sat, 13 Dec 2025 13:05:56 -0800
Subject: [PATCH 7/9] remove appsettings
---
samples/ExceptionPropertiesSample/appsettings.json | 3 ---
1 file changed, 3 deletions(-)
delete mode 100644 samples/ExceptionPropertiesSample/appsettings.json
diff --git a/samples/ExceptionPropertiesSample/appsettings.json b/samples/ExceptionPropertiesSample/appsettings.json
deleted file mode 100644
index 1aab2378..00000000
--- a/samples/ExceptionPropertiesSample/appsettings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": ""
-}
\ No newline at end of file
From b5ef75efe3af6588609958a2dd4e8858f4a9330c Mon Sep 17 00:00:00 2001
From: wangbill
Date: Sat, 13 Dec 2025 13:06:58 -0800
Subject: [PATCH 8/9] Update samples/ExceptionPropertiesSample/README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
samples/ExceptionPropertiesSample/README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/ExceptionPropertiesSample/README.md b/samples/ExceptionPropertiesSample/README.md
index 9b2d4ff2..27f993b7 100644
--- a/samples/ExceptionPropertiesSample/README.md
+++ b/samples/ExceptionPropertiesSample/README.md
@@ -33,7 +33,7 @@ Set `DURABLE_TASK_SCHEDULER_CONNECTION_STRING` and run the sample.
```cmd
set DURABLE_TASK_SCHEDULER_CONNECTION_STRING=Endpoint=https://...;TaskHub=...;Authentication=...;
-dotnet run --project ExceptionPropertiesSample
+dotnet run --project samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
```
```bash
From 4d7606c49005c4f800042895355ae44525ea87ea Mon Sep 17 00:00:00 2001
From: wangbill
Date: Sat, 13 Dec 2025 13:07:12 -0800
Subject: [PATCH 9/9] Update samples/ExceptionPropertiesSample/README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
---
samples/ExceptionPropertiesSample/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/samples/ExceptionPropertiesSample/README.md b/samples/ExceptionPropertiesSample/README.md
index 27f993b7..a9ff13db 100644
--- a/samples/ExceptionPropertiesSample/README.md
+++ b/samples/ExceptionPropertiesSample/README.md
@@ -37,6 +37,7 @@ dotnet run --project samples/ExceptionPropertiesSample/ExceptionPropertiesSample
```
```bash
+export DURABLE_TASK_SCHEDULER_CONNECTION_STRING="Endpoint=https://...;TaskHub=...;Authentication=...;"
dotnet run --project samples/ExceptionPropertiesSample/ExceptionPropertiesSample.csproj
```