ServiceHostFactory.CreateServiceHost被称为多次WCF

时间:2013-05-15 13:13:56

标签: wcf iis

我有一个在IIS上托管的wcf服务

<%@ ServiceHost Language="C#" Debug="true" Service="MyService" Factory="InitializableServiceHostFactory" %>

我的问题是每次向MyService方法发出请求时都会调用CreateServiceHost,这使得我在CreateServiceHost中编写的初始化代码被称为multiply。

2 个答案:

答案 0 :(得分:2)

在我检查了很多关于这个问题之后,我看到它与ASP.NET动态编译有关,当Bin文件夹里面的任何东西发生变化时它重新编译整个站点,但是我的WCF服务写入了temp文件夹里面Bin文件夹使网站重新编译然后重新激活Application_Start,然后InitializableServiceHostFactory重新创建WCF服务

我知道这是一个虚假问题:(

答案 1 :(得分:0)

我怀疑服务主机不是服务类的实例,Carlos Figueira在回答[Is it necessary to Dispose() when using a custom ServiceHostFactory?]时确认了这一点。

我的应用程序多次调用工厂中的CreateServiceHost(),第二次初始化时抛出ArgumentException,并显示以下消息:

The value could not be added to the collection, as the collection already contains an item of the same type: ....

WCF有时会重用服务主机。我通过检查我的任何自定义行为是否已经存在于servicehost的Description.Endpoints.Behaviors列表中来解决该问题,因此我没有再次初始化我的服务主机。在实践中,我的案例更简单,因为我设置了ServiceAuthorizationManager;如果我发现它已经设置,我就避免再次初始化。