information)
+ {
+ return information.Value.Message;
+ }
+ }
+
+ public class ImportantInformation
+ {
+ public string Message { get; set; } = "Important";
+
+ [JSInvokable]
+ public string Reverse()
+ {
+ var messageChars = Message.ToCharArray();
+ Array.Reverse(messageChars);
+ return new string(messageChars);
+ }
+ }
+
+ public class TrivialInformation
+ {
+ public string Message { get; set; } = "Trivial";
+ }
+}
diff --git a/src/Components/test/testassets/BasicTestApp/ServerReliability/ReliabilityComponent.razor b/src/Components/test/testassets/BasicTestApp/ServerReliability/ReliabilityComponent.razor
new file mode 100644
index 0000000000..949bf7c150
--- /dev/null
+++ b/src/Components/test/testassets/BasicTestApp/ServerReliability/ReliabilityComponent.razor
@@ -0,0 +1,40 @@
+@inject Microsoft.JSInterop.IJSRuntime JSRuntime
+@namespace BasicTestApp
+Server reliability
+This component is used on the server-side execution model to validate that the circuit is resilient to failures, intentional or not.
+ The tests that use this component trigger invalid .NET calls to which the server replies with proper JS interop messages indicating a
+ failure to perform the call.
+
+ We include a counter to ensure that the circuit is still alive and working fine after the error.
+
+
+Current count: @currentCount
+Error = @error
+
+
+
+
+@code
+{
+ int currentCount = 0;
+ string error = "";
+
+ void IncrementCount()
+ {
+ currentCount++;
+ }
+
+ async Task TriggerJSInterop()
+ {
+ try
+ {
+ var result = await JSRuntime.InvokeAsync(
+ "sendMalformedCallbackReturn",
+ Array.Empty