等待WCF服务的最佳方式?

bun*_*ink 5 .net c# wcf

我正在制作一个基本的自托管WCF服务,我只是想知道最好的方法是让它等待接受请求吗?我找到的所有基本教程都只使用Console.ReadLine来等待用户按Enter键退出.对于实际应用来说,这似乎不太实用.我试了一会儿(真的); 循环,但这消耗了所有可用的CPU周期,因此它不是一个选项.我也试过Thread.Sleep(0),但服务在睡觉时不接受请求,所以这也行不通.我确信有一些常见的方法让你的程序"停顿"等待WCF请求; 谁知道怎么样?

我正在使用C#,.NET 3.5 sp1.

Ree*_*sey 7

如果你在一个单独的线程中运行它(因为它自己托管),一个简单的选择是使用ManualResetEvent.

只需调用manualResetEvent.WaitOne();WCF线程即可.这将阻止(如Console.ReadLine),直到manualResetEvent.Set()从单独的线程调用.

这里的好处是你可以有一个干净的机制来关闭服务.


Jos*_*osh 7

如果没有UI,真正的应用程序可能会更好地作为Windows服务.您可以在服务的OnStart方法中设置WCF服务主机,然后在OnStop中将其拆除.

这些示例通常使用控制台应用程序的原因是因为它很容易演示,而不会让读者混淆不相关的代码来安装和运行服务.但是,如果您的服务器不具备交互式UI,我建议您调查Windows服务项目模板.

  • 自托管服务只是意味着他正在引导WCF而不是IIS或其他主机进程.Windows服务是非交互式自托管服务的推荐应用程序类型. (3认同)