我构建了一个Client类,它继承自ClientBase类,作为我的WCF客户端的一部分。我试图弄清楚如何确保不需要重新建立连接。我确实看到CommunicationState枚举有我需要的东西,以及ClientBase.State,但是我不知道如果它处于Opening状态,或者类似的东西,如何让它等待......基本上如果它已经打开而不是锁定我很高兴,但如果它正在做像开放或创建或诸如此类的东西,我不想创建一个新的。或者,是否有任何方法可以将Timeout全部删除,并在应用程序关闭时让它关闭连接?
private static MyClient _client;
public static MyClient Client
{
get
{
if (_client != null)
{
lock(_client)
{
//How do I ensure that I can return a MyClient that is in Opened state??
//If it's doing something like Opening I don't wanna create a new one...
}
}
}
}
答案 0 :(得分:2)
从CommunicationObject上的MSDN(ClientBase基于什么),可以安全地在已打开或打开的连接上调用Open()
。它将在已经打开的连接上传递,或等待连接完成打开(如果尚未完成)。