单例模式的多线程 WCF
Posted
技术标签:
【中文标题】单例模式的多线程 WCF【英文标题】:Multi-threading WCF with Singleton Pattern 【发布时间】:2016-10-17 12:10:21 【问题描述】:我已经构建了 WCF 应用程序,现在我想将此服务作为多线程运行。 我正在并行运行三个线程,每个线程都有 WCF 服务对象。在每个线程开始时,我正在执行登录功能以检查用户是否有效&一旦有效,则其余方法将使用服务对象执行。 我的问题是,我如何创建单例模式来创建 WCF 服务对象,它将登录是返回我服务对象和相同的对象,然后与多个线程共享。 我查看了一些文章,但他们有带锁语句的单例。但是锁会阻止其他线程使用实例。 我需要与所有线程共享服务实例,当所有线程释放服务对象时,我必须调用注销方法。
任何帮助将不胜感激。
谢谢
【问题讨论】:
使用 TCP 监听器作为服务。每个客户端将使用不同的端口号。有两种实现方式。服务器可以列出一个端口号,然后在客户端连接时将客户端移动到另一个端口。或者让服务器打开多个端口号,然后让客户端尝试不同的端口号,直到建立连接。请参阅以下网页上的示例。示例使用套接字类,但您可以使用继承套接字的类,例如 TcpListener 和 TcpClient :msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx 单线程和多线程几乎是互斥的术语。为什么要共享“服务对象”?为什么不为每个线程创建对象? @jdweng:TCP监听器和WCF有什么关系? WCF 可以使用任何传输方式吗? 感谢您的回复,我无法为每个线程创建新对象,因为登录对用户有第三方 api 验证,这将返回活动会话对象。所以我只想创建一个由所有线程共享的对象。 【参考方案1】:public class clsSingleton
private static clsSingleton instance = null;
clsSingleton()
public static clsSingleton Instance
get
if (instance == null)
instance = new clsSingleton();
public string GetName()
return "Name";
//如何调用GetName方法
string Name= clsSingleton .Instance.GetName();
【讨论】:
以上是关于单例模式的多线程 WCF的主要内容,如果未能解决你的问题,请参考以下文章