Art*_*ity 6 c# wcf multithreading
有一个带有长期运行的异步线程的WCF服务.这个长时间运行的操作可以运行超过1天.我们在IIS 6上托管WCF服务.
线程运行正常,但在20分钟内我们收到错误消息:
"线程已中止"
线程已经死了.
我们的WCF服务配置:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
你能说出这个问题的根源吗?
谢谢你的答案.
如果此Web服务没有活动(没有请求),IIS可能决定卸载应用程序域,这当然会导致杀死所有线程.默认值为20分钟,可以在IIS中的应用程序池的属性中进行配置.还有其他因素可能导致应用程序池被回收,例如系统在低内存上运行.因此,在IIS中托管此类内容可能并不可靠.您可以考虑在Windows服务中托管长时间运行的任务.
IIS6有一个设置,它会在没有请求的预定义时间后关闭应用程序池,默认为20分钟.这似乎是你遇到的.您可以在"应用程序池属性"下找到此设置=>"性能"选项卡=>在"空闲时关闭工作进程"中删除复选标记.
通常,在IIS下托管长时间运行的任务被认为是一个坏主意,因为有许多事情可能会中断线程或完全关闭进程.应用程序池回收是最突出的.