diff --git a/src/WireMock.Net.Abstractions/Admin/Settings/SettingsModel.cs b/src/WireMock.Net.Abstractions/Admin/Settings/SettingsModel.cs
index 2b421d03e..2cda87b9e 100644
--- a/src/WireMock.Net.Abstractions/Admin/Settings/SettingsModel.cs
+++ b/src/WireMock.Net.Abstractions/Admin/Settings/SettingsModel.cs
@@ -29,5 +29,10 @@ public class SettingsModel
/// Gets or sets wether to allow a body for all HTTP methods.
///
public bool? AllowBodyForAllHttpMethods { get; set; }
+
+ ///
+ /// Gets or sets wether to handle all requests synchronously.
+ ///
+ public bool? HandleRequestsSynchronously { get; set; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs b/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
index f1bd275e5..44f900e2f 100644
--- a/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
+++ b/src/WireMock.Net/Owin/IWireMockMiddlewareOptions.cs
@@ -45,5 +45,7 @@ internal interface IWireMockMiddlewareOptions
bool? DisableJsonBodyParsing { get; set; }
bool? DisableRequestBodyDecompressing { get; set; }
+
+ bool? HandleRequestsSynchronously { get; set; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Owin/WireMockMiddleware.cs b/src/WireMock.Net/Owin/WireMockMiddleware.cs
index cfc708cff..2e02eba17 100644
--- a/src/WireMock.Net/Owin/WireMockMiddleware.cs
+++ b/src/WireMock.Net/Owin/WireMockMiddleware.cs
@@ -25,6 +25,7 @@ namespace WireMock.Owin
{
internal class WireMockMiddleware : OwinMiddleware
{
+ private readonly object _lock = new object();
private static readonly Task CompletedTask = Task.FromResult(false);
private readonly IWireMockMiddlewareOptions _options;
private readonly IOwinRequestMapper _requestMapper;
@@ -65,7 +66,17 @@ public override Task Invoke(IContext ctx)
public Task Invoke(IContext ctx)
#endif
{
- return InvokeInternal(ctx);
+ if (_options.HandleRequestsSynchronously.GetValueOrDefault(true))
+ {
+ lock (_lock)
+ {
+ return InvokeInternal(ctx);
+ }
+ }
+ else
+ {
+ return InvokeInternal(ctx);
+ }
}
private async Task InvokeInternal(IContext ctx)
diff --git a/src/WireMock.Net/Owin/WireMockMiddlewareOptions.cs b/src/WireMock.Net/Owin/WireMockMiddlewareOptions.cs
index 37bbac540..c213b4fd4 100644
--- a/src/WireMock.Net/Owin/WireMockMiddlewareOptions.cs
+++ b/src/WireMock.Net/Owin/WireMockMiddlewareOptions.cs
@@ -51,5 +51,8 @@ internal class WireMockMiddlewareOptions : IWireMockMiddlewareOptions
///
public bool? DisableRequestBodyDecompressing { get; set; }
+
+ ///
+ public bool? HandleRequestsSynchronously { get; set; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Server/FluentMockServer.cs b/src/WireMock.Net/Server/FluentMockServer.cs
index 2e2def00b..df5deef39 100644
--- a/src/WireMock.Net/Server/FluentMockServer.cs
+++ b/src/WireMock.Net/Server/FluentMockServer.cs
@@ -1,13 +1,13 @@
using System;
-using WireMock.Settings;
-
-namespace WireMock.Server
-{
- [Obsolete("Use WireMockServer. This will removed in next version (1.3.x)")]
- public class FluentMockServer : WireMockServer
- {
- public FluentMockServer(IFluentMockServerSettings settings) : base((IWireMockServerSettings) settings)
- {
- }
- }
+using WireMock.Settings;
+
+namespace WireMock.Server
+{
+ [Obsolete("Use WireMockServer. This will removed in next version (1.3.x)")]
+ public class FluentMockServer : WireMockServer
+ {
+ public FluentMockServer(IFluentMockServerSettings settings) : base((IWireMockServerSettings) settings)
+ {
+ }
+ }
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Server/WireMockServer.Admin.cs b/src/WireMock.Net/Server/WireMockServer.Admin.cs
index 85d832d5f..3432da978 100644
--- a/src/WireMock.Net/Server/WireMockServer.Admin.cs
+++ b/src/WireMock.Net/Server/WireMockServer.Admin.cs
@@ -344,7 +344,8 @@ private ResponseMessage SettingsGet(RequestMessage requestMessage)
MaxRequestLogCount = _options.MaxRequestLogCount,
RequestLogExpirationDuration = _options.RequestLogExpirationDuration,
GlobalProcessingDelay = (int?)_options.RequestProcessingDelay?.TotalMilliseconds,
- AllowBodyForAllHttpMethods = _options.AllowBodyForAllHttpMethods
+ AllowBodyForAllHttpMethods = _options.AllowBodyForAllHttpMethods,
+ HandleRequestsSynchronously = _options.HandleRequestsSynchronously
};
return ToJson(model);
@@ -371,6 +372,11 @@ private ResponseMessage SettingsUpdate(RequestMessage requestMessage)
_options.AllowBodyForAllHttpMethods = settings.AllowBodyForAllHttpMethods.Value;
}
+ if (settings.HandleRequestsSynchronously != null)
+ {
+ _options.HandleRequestsSynchronously = settings.HandleRequestsSynchronously.Value;
+ }
+
return ResponseMessageBuilder.Create("Settings updated");
}
#endregion Settings
diff --git a/src/WireMock.Net/Server/WireMockServer.cs b/src/WireMock.Net/Server/WireMockServer.cs
index 3baeeac17..ffb878341 100644
--- a/src/WireMock.Net/Server/WireMockServer.cs
+++ b/src/WireMock.Net/Server/WireMockServer.cs
@@ -217,6 +217,7 @@ protected WireMockServer(IWireMockServerSettings settings)
_options.PostWireMockMiddlewareInit = _settings.PostWireMockMiddlewareInit;
_options.Logger = _settings.Logger;
_options.DisableJsonBodyParsing = _settings.DisableJsonBodyParsing;
+ _options.HandleRequestsSynchronously = settings.HandleRequestsSynchronously;
_matcherMapper = new MatcherMapper(_settings);
_mappingConverter = new MappingConverter(_matcherMapper);
diff --git a/src/WireMock.Net/Settings/IWireMockServerSettings.cs b/src/WireMock.Net/Settings/IWireMockServerSettings.cs
index 843b8729e..0d3ffd884 100644
--- a/src/WireMock.Net/Settings/IWireMockServerSettings.cs
+++ b/src/WireMock.Net/Settings/IWireMockServerSettings.cs
@@ -143,7 +143,7 @@ public interface IWireMockServerSettings
/// - false : also null, 0, empty or invalid HttpStatus codes are allowed.
/// - true : only codes defined in are allowed.
///
- /// [PublicAPI]
+ [PublicAPI]
bool? AllowOnlyDefinedHttpStatusCodeInResponse { get; set; }
///
@@ -157,5 +157,11 @@ public interface IWireMockServerSettings
///
[PublicAPI]
bool? DisableRequestBodyDecompressing { get; set; }
+
+ ///
+ /// Handle all requests synchronously. (default set to false).
+ ///
+ [PublicAPI]
+ bool? HandleRequestsSynchronously { get; set; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Settings/WireMockServerSettings.cs b/src/WireMock.Net/Settings/WireMockServerSettings.cs
index f7c327362..02a60d6a3 100644
--- a/src/WireMock.Net/Settings/WireMockServerSettings.cs
+++ b/src/WireMock.Net/Settings/WireMockServerSettings.cs
@@ -113,5 +113,9 @@ public class WireMockServerSettings : IWireMockServerSettings
///
[PublicAPI]
public bool? DisableRequestBodyDecompressing { get; set; }
+
+ ///
+ [PublicAPI]
+ public bool? HandleRequestsSynchronously { get; set; }
}
}
\ No newline at end of file
diff --git a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
index 62aa48ce3..366f11044 100644
--- a/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
+++ b/src/WireMock.Net/Settings/WireMockServerSettingsParser.cs
@@ -36,7 +36,8 @@ public static IWireMockServerSettings ParseArguments([NotNull] string[] args, [C
AllowCSharpCodeMatcher = parser.GetBoolValue("AllowCSharpCodeMatcher"),
AllowBodyForAllHttpMethods = parser.GetBoolValue("AllowBodyForAllHttpMethods"),
AllowOnlyDefinedHttpStatusCodeInResponse = parser.GetBoolValue("AllowOnlyDefinedHttpStatusCodeInResponse"),
- DisableJsonBodyParsing = parser.GetBoolValue("DisableJsonBodyParsing")
+ DisableJsonBodyParsing = parser.GetBoolValue("DisableJsonBodyParsing"),
+ HandleRequestsSynchronously = parser.GetBoolValue("HandleRequestsSynchronously")
};
if (logger != null)