在ServiceStack中使用JsConfig.BeginScope和Async Client方法

时间:2016-01-20 00:46:17

标签: servicestack

我试图通过使用JsConfigScope在JsConfig上为JsonServiceClient上的单个异步方法设置一个选项,但它似乎不起作用。我究竟做错了什么?还有另一种方法吗?

var client = new JsonServiceClient(baseUrl);
using (var scope = JsConfig.BeginScope())
{
  scope.EmitCamelCaseNames = true;
  return client.PostAsync<SomeResponse>(url, request);
}

1 个答案:

答案 0 :(得分:1)

您不能将使用范围与异步请求一起使用,因为范围将在异步服务完成之前处理。您需要等待响应,即:

using (JsConfig.With(new Config { TextCase = TextCase.CamelCase }))
{
    return await client.PostAsync<SomeResponse>(url, request);
}

您可以使用较低级别HTTP Utils在异步调用({3}}之外拆分请求序列化和响应反序列化。

否则,您可能会使用Response过滤器来处置范围配置,例如:

var scope = JsConfig.With(new Config { TextCase = TextCase.CamelCase });
var client = new JsonServiceClient(BaseUrl) {
    ResponseFilter = httpRes => scope.Dispose()
};
return client.PostAsync<SomeResponse>(url, request);