【问题标题】:Multi-threading WCF with Singleton Pattern单例模式的多线程 WCF
【发布时间】: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 验证,这将返回活动会话对象。所以我只想创建一个由所有线程共享的对象。

标签: c# multithreading wcf singleton


【解决方案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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多