Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF自托管,通过控制台应用程序托管_C#_.net_Wcf - Fatal编程技术网

C# WCF自托管,通过控制台应用程序托管

C# WCF自托管,通过控制台应用程序托管,c#,.net,wcf,C#,.net,Wcf,我在控制台应用程序、windows服务等中看到了自托管WCF服务的示例、示例代码等 我的问题是,这将如何在生产中发挥作用?它会有效率吗?它会扩展吗 我不确定它将如何工作,所以另一个问题是,它是单线程的吗?多线程?我需要管理多线程吗?appdomains 由于与应用程序相关的原因,我更喜欢使用命令行、windows服务托管 我的问题是,, 它会有效率吗?它会扩展吗 是的,是的。但是对于大规模的应用程序,你仍然应该考虑IIS+是. 所以另一个问题是,这是单线程的吗?多线程 这是由配置决定的 承载WC

我在控制台应用程序、windows服务等中看到了自托管WCF服务的示例、示例代码等

我的问题是,这将如何在生产中发挥作用?它会有效率吗?它会扩展吗

我不确定它将如何工作,所以另一个问题是,它是单线程的吗?多线程?我需要管理多线程吗?appdomains

由于与应用程序相关的原因,我更喜欢使用命令行、windows服务托管

我的问题是,, 它会有效率吗?它会扩展吗

是的,是的。但是对于大规模的应用程序,你仍然应该考虑IIS+是. 所以另一个问题是,这是单线程的吗?多线程


这是由配置决定的

承载WCF端点的Windows服务对于不会经常受到攻击的小型服务来说是合适的;你不必和IIS打交道,这对我来说是一件非常痛苦的事情。但是,只有一个侦听器在侦听,因此不建议将IIS用于可能同时从多个地方受到攻击的服务;它建立了一个应用程序池,可以同时处理许多请求。该模型适用于两台机器之间的一对一互操作;您可以将服务主机设置在某个仓库中的set-and-forget-box上,并调用它来执行简单但自定义的任务,如重新启动、日志转储等

避免让任何用户应用程序控制台或以其他方式托管服务端点,初始概念验证测试除外。除了单一侦听器的缺点外,用户应用程序必须在登录用户而不是服务用户的上下文中运行,服务用户作为Windows启动的一部分登录,并且必须具有自定义的keepalive监视;有了一项服务,Windows可以被告知在它崩溃时只需重新启动它,而它对用户应用程序崩溃毫不犹豫,只是为了防止该程序破坏整个操作系统,并询问用户是否要报告崩溃

它会有效率吗

它取决于服务实现,取决于它在特定时间范围内能够管理的最大请求数。效率是一个相对的衡量标准:假设您的服务能够每秒处理20条消息,如果您的要求是每秒处理10条消息,那么您的服务是高效的。但如果要求是30,则不是

它会扩展吗

再一次,它与托管无关。您的服务是无状态的吗?如果不是这样的话,它们可能不会扩展很多,因为负载平衡是不可能的

这是可以管理的吗

可能不是: -您需要有一个用户登录服务器才能运行应用程序 -它不会自动启动服务器 -它无法在发生故障时自动重新启动 -它不会主动创建服务实例 -如果没有自定义代码,它不会提供检查服务运行状况的方法

单一实例?多线程

如果您的服务不维护每个客户端调用之间的状态,则将其配置为每个调用一个实例,并且无多线程->无并发、高吞吐量

如果您的服务确实维护状态,则将其配置为每个会话一个实例和多线程,以允许客户端执行并发调用。小心并发问题并保护您的资源


如果您的服务不维护每个客户机的状态,但保留了用于所有调用的全局数据,请考虑每个服务的单实例和多线程。请记住可能存在的并发问题。在这种情况下,您最好每次调用使用一个实例,并将全局存储保留在服务之外。

它是如何由配置决定的?@user177我假设您有一个App.Config。例如,见