在我的ASP.NET MVC控制器中,我想调用基于服务堆栈的服务(不在MVC站点中托管)。为了使代码可测试,我想将这个服务客户端注入到控制器的构造函数中。可以在多线程应用程序(MVC)中使用ServiceClient的一个实例
假设我有自己的继承自JsonServiceClient的类,那么对于所有的MVC调用,我可以使用该服务客户端的单例吗?这意味着客户端必须是线程安全的。
要么(Autofac)注册可以是个单:
builder.RegisterType<SomeServiceClient>().SingleInstance();
或它必须是每http请求:
builder.RegisterType<SomeServiceClient>().InstancePerHttpRequest();
实测其中另一个servicestack用户似乎使用了博客文章单身人士,但我不确定:Blog Article Showing an Example
,这可能会带来问题。最终会出现System.InvalidOperationException:在前一个调用仍在进行时,无法重新调用BeginGetRequestStream/BeginGetResponse。 在System.Net.HttpWebRequest.BeginGetResponse(AsyncCallback的回调,对象状态) 在ServiceStack.ServiceClient.Web.AsyncServiceClient.SendWebRequestAsync [τ响应](字符串列举HTTPMethod,对象请求,RequestState'1 requestState,HttpWebRequest的的WebRequest) –
@WayneBrantley你有一个repro的例子吗?因为每个请求都会创建一个新的HttpWebRequest。 – mythz
在AppHost.Configure中,我注册了一个自JsonServiceClient后继的自定义类的实例。这个调用只需要帮助器方法并添加一个RequestFilter来添加一个请求头。然后我从我的Web应用程序中使用同一个实例。这导致上面的错误,所以我改变了注册有一个lambda和'ReuseScope.None'。这个问题再也没有出现,所以我继续前进。这是服务栈3.x –