Ian*_*ose 3 .net configuration wcf nettcpbinding
我们收到此错误:
System.ServiceModel.ServerTooBusyException:RM Destination拒绝了创建可靠会话的请求.服务器'net.tcp:// localhost:50000 /'太忙,无法处理此请求.稍后再试.该频道无法打开.
据我了解,我需要在ReliableSession绑定中增加MaxPendingChannels的值.
但是我们在这样的代码中配置WCF:
serviceHost = new ServiceHost(typeof(MyServiceClass));
ServiceEndpoint endPoint = serviceHost.AddServiceEndpoint(
typeof(IMyService),
new NetTcpBinding(SecurityMode.None, true),
endPointAddress);
Run Code Online (Sandbox Code Playgroud)
那么如何以编程方式设置ReliableSession.MaxPendingChannels?(我可以找到的所有示例都使用配置文件)
在此网页上搜索MaxPendingChannels 有一个选项,但它似乎过于复杂.
这就是我做的:
private Binding CreateBindingWith_MaxPendingChannels_Set(Binding baseBinding)
{
BindingElementCollection elements = baseBinding.CreateBindingElements();
ReliableSessionBindingElement reliableSessionElement =
elements.Find<ReliableSessionBindingElement>();
if (reliableSessionElement != null)
{
reliableSessionElement.MaxPendingChannels = 128;
CustomBinding newBinding = new CustomBinding(elements);
newBinding.CloseTimeout = baseBinding.CloseTimeout;
newBinding.OpenTimeout = baseBinding.OpenTimeout;
newBinding.ReceiveTimeout = baseBinding.ReceiveTimeout;
newBinding.SendTimeout = baseBinding.SendTimeout;
newBinding.Name = baseBinding.Name;
newBinding.Namespace = baseBinding.Namespace;
return newBinding;
}
else
{
throw new Exception("the base binding does not " +
"have ReliableSessionBindingElement");
}
}
Run Code Online (Sandbox Code Playgroud)
.....
Binding customBinding = CreateBindingWith_MaxPendingChannels_Set(
new NetTcpBinding(SecurityMode.None, true));
serviceHost = new ServiceHost(typeof(MyService));
ServiceEndpoint endPoint = serviceHost.AddServiceEndpoint(
typeof(IMyService),
customBinding,
endPointAddress);
Run Code Online (Sandbox Code Playgroud)