gpt4 book ai didi

c# - 使用 DI 和 InstanceContextMode.Percall 的自定义 ServiceHost

转载 作者:行者123 更新时间:2023-11-30 12:10:54 27 4
gpt4 key购买 nike

在我的托管应用程序中,我目前的 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 是不够的……这是异常(exception)情况。

控制实例创建由 IInstanceProvider 管理.

Is this the solution to my problem ? How do I pass values to the constructor on my wcf service?

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

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

关于c# - 使用 DI 和 InstanceContextMode.Percall 的自定义 ServiceHost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16919969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com