C#:WCF客户端无法连接到同一台计算机

时间:2013-02-24 12:21:58

标签: c# wcf

我正在努力制作我的第一个WCF计划。它应该非常简单,但我无法让它发挥作用。

到目前为止我已经完成的步骤:

  1. 创建C#windows窗体应用程序
  2. 添加按钮
  3. 为项目添加了WCF服务。
  4. 根据thisthis页面教程更改了代码。
  5. IWCF.cs 代码:

    using System;
    ...etc
    
    namespace WCF_Application
    {
    
        [ServiceContract]
        public interface IWCF
        {
            [OperationContract]
            string DoWork();
        }
    }
    

    WCF.cs 代码:

    using System;
    ...
    
    namespace WCF_Application
    {
    
        public class WCF : IWCF
        {
            public string DoWork()
            {
                return " Hello There! ";
            }
    
        }
    }
    

    按钮代码:

    private void btnConnect_Click(object sender, EventArgs e)
            {
    // Starting the Server
    
                ServiceHost svh = new ServiceHost(typeof(WCF));
                svh.AddServiceEndpoint(
                    typeof(IWCF),
                    new NetTcpBinding(),
                    "net.tcp://localhost:8000");
                svh.Open();
                MessageBox.Show("Connected");
    
    // Connecting Client to the server
                ChannelFactory<IWCF> scf;
                scf = new ChannelFactory<IWCF>(
                            new NetTcpBinding(),
                            "net.tcp://localhost:8000");
    
                IWCF s = scf.CreateChannel();
                string response = s.DoWork();
                MessageBox.Show(response);
                svh.Close();
    }
    

    我没有收到回复消息。该计划只是冻结。当我跟踪代码时,程序卡在strong response = s.DoWork();行。

    我还检查了cmd中的netstat -a。似乎端口8000在聆听模式下打开。所以问题应该在客户端部分。

    OS Windows 7 / VS 2010 / C#

1 个答案:

答案 0 :(得分:3)

您遇到了死锁问题,因为您的WCF服务托管在与UI相同的线程上。您可以尝试以下方法在另一个线程上托管服务。

[ServiceBehavior(UseSynchronizationContext = false)]
public class WCF : IWCF
{
    public string DoWork()
    {
        return " Hello There! ";
    }
}

以下是WPF threading modelUseSynchronizationContext的背景信息。或者,您可以断开对您的服务的客户端调用,但这也可能会产生其他UI更新后果。

相关问题