2011-02-14 80 views
2

托管我所看到的例子,示例代码等自一个控制台应用程序中托管WCF服务,窗口服务等WCF自托管,通过控制台应用程序

我的问题是,如何将这项工作在生产?它会有效吗?它会缩放吗?

我不确定,它将如何工作,所以其他问题是,这将是单线程?多线程?我是否需要管理多线程?应用程序域?

我更喜欢托管命令行,Windows服务以应用相关的原因。

回答

1

承载WCF端点的Windows服务适用于不会经常被点击的小型服务;你不必惹IIS(这可能是一个真正的痛苦国际海事组织)。但是,只有一个侦听器正在侦听,所以不建议这样的服务可能同时从多个位置触发(使用IIS;它设置了可处理多个同时请求的应用程序池)。这种模式适用于两台机器之间的一对一互操作;您可能会将服务主机设置在存储在某个仓库的“设置并忘记”框中,并将其称为执行简单但自定义的任务,如重新启动,日志转储等。

避免拥有任何用户应用程序(控制台或以其他方式)承载服务端点,除了初始概念验证测试。除了单监听器的缺点之外,用户应用程序必须在已登录用户的上下文中运行(而不是作为Windows启动的一部分“登录”的服务用户),并且必须具有自定义的“保持活动”监测;通过一项服务,Windows可以被告知如果崩溃就重新启动它,而不会让用户应用程序崩溃,而不是阻止该程序取消整个操作系统(并询问用户是否想要报告崩溃)。

2

我的问题是,
会不会是有效的?它会缩放吗?

是的,是的。但对于真正的大规模应用程序,您仍然应该考虑使用IIS(+ WAS)。

所以其他问题是,这将是单线程?多线程?

这是由配置决定的。

+0

配置如何确定? – DarthVader 2011-02-14 18:44:40

2

它会高效吗?

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

它会缩放吗?

再次,它与托管无关。你的服务是无状态的吗?如果不是那么,他们可能不会扩展很多,因为负载平衡是不可能的。

它可以管理吗?

大概不会: - 你需要有记录的服务器上的用户运行应用程序 - 它不与服务器 自动启动 - 它不能失败 自动重启 - 它不创建服务的情况下,积极主动地 - 它不提供(不包括自定义代码)的方式来检查健康

单实例?多线程?

如果你的服务不维护每个客户端调用之间的状态,然后将其配置为“每次调用一个实例,并没有多线程” - >无并发,高吞吐量

如果您的服务确实保持状态,然后将其配置为“每个会话和多线程一个实例”以允许客户端执行并发呼叫。注意并发问题并保护您的资源。

如果您的服务没有为每个客户端维护状态,但为所有呼叫保留一些全局数据,请考虑“每个服务和多线程的单个实例”。请记住可能的并发问题。因此,您最好使用“每次调用一个实例”并将全局存储保留在服务之外。

相关问题