当前位置: 代码迷 >> Web Service >> WCF 多线程检察 chanel status出错
  详细解决方案

WCF 多线程检察 chanel status出错

热度:239   发布时间:2016-05-02 02:21:51.0
WCF 多线程检查 chanel status出错
在多线程检查chanel的status时出现异常
 public bool VerifyConnection()
        {
            if (clt == null)
            {
                return OpenClient();
            }
            else if (clt.State != CommunicationState.Opened)
            {
                return OpenClient();
            }

            return true;
        }


第一个线程进来运行OpenClient()的时候(timeout 2s), 另一个线程进来, 奇怪的是clt.State 有时候是opened, 有时候是opening, opening还可以理解, 但是opened作何解呢? 是不是这个state不准?

求助问题如何解决。
谢谢。
------解决方案--------------------
没加锁?
------解决方案--------------------
应该加锁,多线程运行程序是异步的,有可能导致上面的情况
------解决方案--------------------
弱弱的问下,为啥state不能是opened? 除了这2中状态不是还应该有很多其他状态吗, 也许我没看懂问题

http://msdn.microsoft.com/en-us/library/ms789041(v=vs.110).aspx
------解决方案--------------------
这位兄弟我还是没懂你的意思, 我理解你的意思是state不能是opened但是贴的这段代码为什么还检查她状态是否为opened呢?

else if (clt.State != CommunicationState.Opened)

引用:
Quote: 引用:

弱弱的问下,为啥state不能是opened? 除了这2中状态不是还应该有很多其他状态吗, 也许我没看懂问题

http://msdn.microsoft.com/en-us/library/ms789041(v=vs.110).aspx


按照我的理解, opened应该是这个connection已经建立起来了。
  相关解决方案