可以在多线程应用程序(MVC)中使用ServiceClient的一个实例

时间:2013-10-10 04:44:34

标签: servicestack

在我的ASP.NET MVC控制器中,我想调用基于服务栈的服务(不在MVC站点中托管)。为了使代码可测试,我想将此服务客户端注入到控制器构造函数中。

假设我有自己的继承自JsonServiceClient的类,我可以为所有MVC调用使用该服务客户端的单例吗?这意味着客户端必须是线程安全的。

(Autofac)注册可以是单身:

builder.RegisterType<SomeServiceClient>().SingleInstance();

或者它必须是每个http请求:

builder.RegisterType<SomeServiceClient>().InstancePerHttpRequest();

发现一篇博客文章,其他服务堆栈用户似乎使用单例,但我不确定:Blog Article Showing an Example

1 个答案:

答案 0 :(得分:1)

每个请求通常都是可重入的,所以主要是ThreadSafe用作Singleton,一个警告是它共享相同的CookieContainer,而ServiceClients不会改变CookieContainer Collection本身,底层的WebRequest会不会知道WebRequest是否同步它周围的访问 - 虽然我从来没有亲自看到它们的任何问题。

您可以禁用正在使用的Cookie(例如,如果您的客户不需要会话):

client.StoreCookies = false;