4

在我的托管应用程序中,我目前的 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

这是我的问题的解决方案吗?如何将值传递给我的 wcf 服务的构造函数?

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

4

1 回答 1

3

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

控制实例创建由IInstanceProvider管理。

这是我的问题的解决方案吗?如何将值传递给我的 wcf 服务的构造函数?

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

请注意,Unity.WCF 不支持基于对象生命周期的 WCF OperationContexts。有多个(更复杂的)这样实现。

于 2013-06-04T17:39:35.307 回答