【发布时间】:2011-07-09 16:22:03
【问题描述】:
我正在使用 WCF 向运行在同一台机器上的 2 个不同的 win 表单应用程序发送和获取数据。我正在使用命名管道和双工通道。我的客户端实现如下所示。
InstanceContext myContext = new InstanceContext(this);
NetNamedPipeBinding nb = new NetNamedPipeBinding();
nb.MaxBufferPoolSize = 5000000;
nb.MaxBufferSize = 500000;
nb.MaxReceivedMessageSize = 500000;
nb.ReceiveTimeout = TimeSpan.FromMinutes(5);
DuplexChannelFactory<IService> myProxy = new DuplexChannelFactory<IService>(myContext, nb, new EndPointAddress("net.pipe://localhost/MyService"));
IService myServiceClient = myProxy.CreateChannel();
服务器端实现如下图所示:
NetNamedPipeBinding np = new NetNamedPipeBinding();
np.MaxBufferPoolSize = 5000000;
np.MaxBufferSize = 500000;
np.MaxReceivedMessageSize = 500000;
host.AddServiceEndpoint(typeof(IService), np, "net.pipe://localhost/MyService");
host.OpenTimeout = TimeSpan.FromMinutes(5);
host.CloseTimeout = TimeSpan.FromMinutes(5);
host.Open();
我可以通过回调将大约 100 个对象集合 (ObservableCollection<Customer>) 从 1 个应用程序传递到其他应用程序。但是如果我将其设为 1000 或更大的对象,则会发生以下超时异常错误。
对管道的写入未完成 在分配的超时时间内 00:00:00。分配给这个的时间 操作可能是一个 更长的超时时间。
我的代码有什么问题?请帮我解决这个问题。
提前谢谢...
【问题讨论】:
-
您可以在客户端和服务器上打开 WCF 跟踪以查看有关正在发生的事情的更多详细信息:msdn.microsoft.com/en-us/library/ms733025.aspx 此外,您可以根据对象的复杂性设置
MaxItemsInObjectGraph:blogs.msdn.com/b/drnick/archive/2006/11/14/…