c# – 使用DI和InstanceContextMode.Percall定制ServiceHost

在我的托管应用程序中,我目前运行的WCF服务如下:

SomeService service = new SomeService(container) //IUnityContainer
ServiceHost serviceHost = new ServiceHost(service, serviceAddress);

抓到了什么? SomeService定义为:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single

这不再好了,我需要让它成为InstanceContextMode.PerCall.

尝试.Open()时如果将InstanceContextMode更改为“PerCall” – 它将抛出:

System.InvalidOperationException: In order to use one of the ServiceHost constructors that takes a service instance, the InstanceContextMode of the service must be set to InstanceContextMode.Single.  This can be configured via the ServiceBehaviorAttribute.  Otherwise, please consider using the ServiceHost constructors that take a Type argument

这是我的问题的解决方案吗? How do I pass values to the constructor on my wcf service?

我的主要关注点:
我在这个托管应用程序中运行不同类型的服务,似乎这个解决方案只有在运行一种类型的服务时才是好的.

解决方法:

当需要多个服务实例(PerCall或PerSession)时,将单个服务实例传递到ServiceHost是不够的……这是例外.

控制实例创建由IInstanceProvider管理.

Is this the solution to my problem ? 07001

这只回答了你问题的一半.您正在使用Unity.创建容器的管理需要成为实现的一部分.最常见的解决方案是使用Unity.WCF,也可以作为NuGet包使用.

请注意,Unity.WCF不支持基于WCF OperationContexts的对象生存期.有许多(更复杂的)实现,如this.

上一篇:ASP.NET Core中GetService()和GetRequiredService()之间的区别


下一篇:c# – 如何为没有SVC文件的自托管WCF服务指定ServiceHostFactory