C# 使用WCF的TimeoutException
我在尝试设置我打开的代理/通道内的一些变量时遇到超时异常。 我不确定这是一个坏的数据契约还是我没有正确设置的东西 以下是服务接口:C# 使用WCF的TimeoutException,c#,wcf,exception,timeoutexception,C#,Wcf,Exception,Timeoutexception,我在尝试设置我打开的代理/通道内的一些变量时遇到超时异常。 我不确定这是一个坏的数据契约还是我没有正确设置的东西 以下是服务接口: [ServiceContract] public interface ICommandBoardService { [OperationContract] void Hello(); [OperationContract] Command_Board.States getState(); [OperationContrac
[ServiceContract]
public interface ICommandBoardService
{
[OperationContract]
void Hello();
[OperationContract]
Command_Board.States getState();
[OperationContract]
void setState(Command_Board.States s);
[OperationContract]
string setConnected(int i);
[OperationContract]
int getConnected();
}
以下是服务类别:
public class CommandBoardService : ICommandBoardService
{
[DataMember]
public Command_Board.States state;
[DataMember]
public int connected = 0;
public void Hello()
{
}
public Command_Board.States getState()
{
return state;
}
public void setState(Command_Board.States s)
{
state = s;
}
public string setConnected(int i){
connected += i;
return "Player "+connected+" Connected";
}
public int getConnected(){
return connected;
}
}
这里是我打开主机并调用代理的地方:
ICommandBoardService proxy;
using (ServiceHost host = new ServiceHost(typeof(CommandBoardServiceLibrary.CommandBoardService)))
{
host.AddServiceEndpoint(typeof(
CommandBoardServiceLibrary.ICommandBoardService),
new NetTcpBinding(),
"net.tcp://localHost:9000/CommandBoardEndPoint");
host.Open();
proxy = ChannelFactory<ICommandBoardService>.CreateChannel(
new NetTcpBinding(),
new EndpointAddress(
"net.tcp://localhost:9000/CommandBoardEndPoint"));
proxy.setConnected(0);
proxy.setState(state);
}
ICommandBoardService代理;
使用(ServiceHost主机=新ServiceHost(类型为(CommandBoardServiceLibrary.CommandBoardService)))
{
host.AddServiceEndpoint(类型)(
CommandBoardServiceLibrary.ICommandBoardService),
新的NetTcpBinding(),
“净。tcp://localHost:9000/CommandBoardEndPoint");
host.Open();
proxy=ChannelFactory.CreateChannel(
新的NetTcpBinding(),
新端点地址(
“净。tcp://localhost:9000/CommandBoardEndPoint"));
proxy.setConnected(0);
代理设置状态(状态);
}
当我到达proxy.setConnected(0)
时,我会出现以下错误,即使我将它们翻转过来,我也会在proxy.setState(state)
这就是错误:
此请求操作已发送到网络。tcp://localhost:9000/CommandBoardEndPoint 在配置的超时(00:01:00)内未收到答复。分配给此操作的时间可能是较长超时的一部分。这可能是因为该服务仍在处理该操作,或者因为该服务无法发送回复消息。请考虑增加操作超时(通过将通道/代理转换为ICONTROST通道并设置操作超时属性),并确保服务能够连接到客户端。< /代码> < / P>
我可以做些什么来修复错误?
有些人说要增加最大缓冲区,但我不知道如何使用WinForms做到这一点。您应该在绑定属性下增加app.config中的maxBufferSize
<binding name="blah"
maxBufferSize="2147483647" -- Max int size
/>
您正在打开主机并在同一线程上创建代理。如果这样做有效,我会感到惊讶;我看不出主机是如何实际执行任何操作的。客户机将同步等待来自主机的响应——主机永远不会给出响应,因为它只能在客户机正在使用的线程上完成该工作
我认为,解决方案是使用.net中多种不同的多线程方法中的一种,在一个单独的线程中启动主机,这样两者都可以同时工作。您的代码所做的只是增加一个变量。我不明白为什么要花1分钟才能完成。我假设问题发生在其他地方。启用跟踪并查看跟踪日志中是否有任何内容。@PoweredByOrange,我以前从未启用过跟踪。我应该寻找什么?只需谷歌“如何启用跟踪wcf”。@PoweredByOrange,是的,我正在看一些视频。奇怪的是,当在其他地方使用相同的代码时,我得到了预期的结果。你解决问题了吗?