private Thread tt;
 private void button1_Click(object sender, EventArgs e)
{
ThreadStart ts = delegate
{
     //调用WCF服务
using (test.ServiceClient sc = new test.ServiceClient())
{
string s = sc.DoWork();//DoWork方法有2秒的时耗
MessageBox.Show(s);
}
}; if (tt != null)
{
tt.Abort();
tt.Join();
}
tt = new Thread(ts);
tt.Name = "test";
tt.Start();
}

解决方案 »

  1.   

    好像缺省设置是同一个url只能同时有两个连接
      

  2.   

    我每次单击按钮其实是把上一次的线程终止的啊, if (tt != null)
            {
                tt.Abort();
                tt.Join();
            }
    应该不存在多次连接吧
      

  3.   

    test.ServiceClient sc = new test.ServiceClient()这个拿到 click事件外,不要多次生成看看。
    因为你判断 !=null就abort了,可能 using 没有完全释放,端口还在占用就又创建了一个。
      

  4.   

    test.ServiceClient sc = new test.ServiceClient()这个拿到 click事件外,不要多次生成看看。
    因为你判断 !=null就abort了,可能 using 没有完全释放,端口还在占用就又创建了一个。
      

  5.   


    放在外面是没有关系,但是跟端口有关系吗,test.ServiceClient sc = new test.ServiceClient()可以连续执行2次创建2个没有问题呀。只是我abort线程时就报错是不是跟wcf正在创建有关系。
      

  6.   

    为何不用ChannelFactory? 在CreatChannel后就可调用服务了,都不用Abord 和Close
    我是没用过你这种调用WCF的方法
      

  7.   


    创建不代表已经打开。 调用 sc.Open 才正式开始启用。才开始占用端口。
    而且Open这个方法根据你的wcf类不同,启动时间或长或短。你要保证的是只open一次,而不是new了 serviceclient实例一次。new实例实际没有发生端口占用。(当然只是通过你说创建2个没报错的猜测,你abort之前调用 close 关闭一下应该就不会出问题了。