C#:WCF客户端不';不要连接到同一台机器
我正在尝试制作我的第一个WCF程序。它应该很简单,但我不能设法让它工作 到目前为止,我已经采取了以下步骤:C#:WCF客户端不';不要连接到同一台机器,c#,wcf,C#,Wcf,我正在尝试制作我的第一个WCF程序。它应该很简单,但我不能设法让它工作 到目前为止,我已经采取了以下步骤: 创建C#windows窗体应用程序 添加按钮 已将WCF服务添加到项目中 根据和第页教程更改了代码 IWCF.cs代码: using System; ...etc namespace WCF_Application { [ServiceContract] public interface IWCF { [OperationContract]
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吗?普通的,普通的,原始的,未编辑的,默认的;)哦,你说得对,我没有注意到线的部分。非常感谢!:)