我有一个在IIS上托管的wcf服务
<%@ ServiceHost Language="C#" Debug="true" Service="MyService" Factory="InitializableServiceHostFactory" %>
我的问题是每次向MyService方法发出请求时都会调用CreateServiceHost,这使得我在CreateServiceHost中编写的初始化代码被称为multiply。
答案 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
;如果我发现它已经设置,我就避免再次初始化。