我有一个托管在 IIS 上的 wcf 服务
<%@ ServiceHost Language="C#" Debug="true" Service="MyService" Factory="InitializableServiceHostFactory" %>
我的问题是每次对 MyService 方法的请求都会调用 CreateServiceHost,这使得我用 CreateServiceHost 编写的初始化代码被称为乘法。
在我检查了很多关于这个问题后,我发现它与 ASP.NET 动态编译有关,当 Bin 文件夹中的任何内容发生更改时,它会重新编译整个站点,但是我的 WCF 服务写入 Bin 文件夹中的 temp 文件夹重新编译站点,然后重新启动 Application_Start,然后 InitializableServiceHostFactory 重新创建 WCF 服务
我知道这是一个虚拟问题:(
我怀疑服务主机不是服务类的实例,Carlos Figueira 在他对[Is it necessary to Dispose() when using a custom ServiceHostFactory?]的回答中证实了这一点。
我的CreateServiceHost()
应用程序多次调用 in factory ,ArgumentException
第二次初始化时抛出一个消息:
The value could not be added to the collection, as the collection already contains an item of the same type: ....
WCF 有时会重用服务主机。我通过检查我的任何自定义行为是否已经在服务主机的Description.Endpoints.Behaviors
列表中解决了这个问题,所以我没有第二次初始化我的服务主机。在实践中,我的情况更简单,因为我设置了ServiceAuthorizationManager
; 如果我发现它已经设置好了,我会避免再次初始化任何东西。