wcf - WCF 服务通常是否应该是单例的?

标签 wcf singleton

我相信 Jimmy Nillson 说过他通常将他的网络服务做成单例。这是首选方法吗,并且使用 WCF?除了使服务方法静态之外,还有其他事情要做吗?

最佳答案

很好的回答,但我认为原始问题有问题。一项技术的“典型使用”是一个结构不佳的问题。没有人有“典型”场景,您应该在决定实现或方法之前查看特定问题的要求。您的要求应告知您的解决方案。

例如,Singletons [即Singleton 模式] 只是我们盒子里的另一个工具,和任何工具一样,在某些情况下它可以工作,而其他人则不能。具体来说,如果您需要集中业务逻辑[在独立应用程序中比远程 WCF 服务更适用],或者共享内存或资源,单例可以很好地工作。当然,如果是共享业务逻辑,状态是在调用栈中维护的,多线程是没有意义的。如果在消费者调用之间共享内存,那么多线程就是一个问题。至于WCF,您可以指定多线程行为的两种模式[实际上是三种,但第三种是第一种的特例],

// we are specifying that this service implementation is single-threaded
// and WCF should permit *at most* one call at a time. Any requests made
// simultaneously/concurrently are queued.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class SingleThreadedNonThreadSafeService : IService { ... }


// we are specifying that this service implementation is multi-threaded
// and [hopefully!] thread-safe. WCF should permit any number of threads,
// or any number of simultaneous concurrent calls.
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple)]
public class MultiThreadedThreadSafeService : IService { ... }
ConcurrencyMode 的 Xml 注释基本上和上面说的一样。

如果您 不要需要在消费者之间共享业务逻辑或内存,那么不要使用单例,“模型”适合问题。这就像在继姐妹的脚上强行穿玻璃鞋!没有人应该看到这一点。

相反,如果调用之间没有共享状态,则为每个调用\ session 托管一个实例。

关于wcf - WCF 服务通常是否应该是单例的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756487/

相关文章:

WCF WebInvoke 获取 WSDL 问题

c++ - 对此(希望)100% 安全的双重检查锁定替代单例的任何评论

c++ - 两个线程访问单例类 - 无法正常工作

android - 如何实现 LiveData 单例

java - 静态变量、模式和 Android 性能

C#:使用 "self"类型作为泛型参数?

.net - 找不到 WCF 服务器证书 key 集,找不到私钥

wcf - 在 VS2008/C# 中使用传统的 web 服务或使用 WCF

database - WCF 服务不模拟客户端

wcf - Powershell:使用 MTOM 消息编码使用 WCF 服务时出错