C#:WCF客户端不';不要连接到同一台机器

C#:WCF客户端不';不要连接到同一台机器,c#,wcf,C#,Wcf,我正在尝试制作我的第一个WCF程序。它应该很简单,但我不能设法让它工作 到目前为止,我已经采取了以下步骤: 创建C#windows窗体应用程序 添加按钮 已将WCF服务添加到项目中 根据和第页教程更改了代码 IWCF.cs代码: using System; ...etc namespace WCF_Application { [ServiceContract] public interface IWCF { [OperationContract]

我正在尝试制作我的第一个WCF程序。它应该很简单,但我不能设法让它工作

到目前为止,我已经采取了以下步骤:

  • 创建C#windows窗体应用程序
  • 添加按钮
  • 已将WCF服务添加到项目中
  • 根据和第页教程更改了代码
  • IWCF.cs代码:

    using System;
    ...etc
    
    namespace WCF_Application
    {
    
        [ServiceContract]
        public interface IWCF
        {
            [OperationContract]
            string DoWork();
        }
    }
    
    using System;
    ...
    
    namespace WCF_Application
    {
    
        public class WCF : IWCF
        {
            public string DoWork()
            {
                return " Hello There! ";
            }
    
        }
    }
    
    WCF.cs代码:

    using System;
    ...etc
    
    namespace WCF_Application
    {
    
        [ServiceContract]
        public interface IWCF
        {
            [OperationContract]
            string DoWork();
        }
    }
    
    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();
    }
    
    private void btn连接\u单击(对象发送方,事件参数e)
    {
    //启动服务器
    ServiceHost svh=新的ServiceHost(类型(WCF));
    svh.AddServiceEndpoint(
    类型(IWCF),
    新的NetTcpBinding(),
    “净。tcp://localhost:8000");
    svh.Open();
    MessageBox.Show(“已连接”);
    //将客户端连接到服务器
    渠道工厂scf;
    scf=新渠道工厂(
    新的NetTcpBinding(),
    “净。tcp://localhost:8000");
    IWCF s=scf.CreateChannel();
    字符串响应=s.DoWork();
    MessageBox.Show(响应);
    svh.Close();
    }
    
    我没有收到回复信息。程序停止了。当我跟踪代码时,程序在
    strong response=s.DoWork()处卡住

    我还检查了cmd中的
    netstat-a
    。端口8000似乎在监听模式下打开。因此,问题应该出在客户机部分

    操作系统Windows 7/ VS 2010/
    C#

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

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

    以下是有关和的一些背景信息。或者,您可以中断对服务的客户端调用,但这也可能会导致其他UI更新结果。

    尝试在服务器上设置断点,调用是否实际进入?@blue确切位置?我不明白你说的“在服务器上”是什么意思。好吧,你的服务类大体上是在服务器上运行的。在C#land中,这相当于您的服务级别(在您的案例中是WCF级别)。在do work返回行上放置一个断点,以查看是否调用了它,并且返回操作是否正确,或者它是否没有走那么远。我建议启动一个香草WCF项目,看看它是否能在没有任何修改的情况下工作。@blue是的,我确实在“Hello There”行中尝试了断点,但它没有中断(似乎没有达到该点/行)。和。。对不起,你能解释一下什么是普通的WCF吗?普通的,普通的,原始的,未编辑的,默认的;)哦,你说得对,我没有注意到线的部分。非常感谢!:)