我开发了一个silverlight聊天应用程序。在单个窗口中同时加载多个聊天窗口,每个聊天窗口都会创建与wcf双工服务的新连接。但是在每10个聊天窗口之后,它会与wcf断开连接并停止工作。我代码一些用于限制选项,但它们不起作用。这是我的代码: -
public class PollingDuplexServiceHostFactory : ServiceHostFactoryBase
{
public override ServiceHostBase CreateServiceHost(string constructorString,
Uri[] baseAddresses)
{
return new PollingDuplexSimplexServiceHost(baseAddresses);
}
}
/// <summary>
/// PollingDuplexServiceHostFactory
/// </summary>
class PollingDuplexSimplexServiceHost : ServiceHost
{
public PollingDuplexSimplexServiceHost(params System.Uri[] addresses)
{
InitializeDescription(typeof(JakayaChatService), new UriSchemeKeyedCollection(addresses));
Description.Behaviors.Add(new ServiceMetadataBehavior());
var throttle = Description.Behaviors.Find<ServiceThrottlingBehavior>();
if (throttle == null)
{
throttle = new ServiceThrottlingBehavior
{
MaxConcurrentCalls = 1000,
MaxConcurrentInstances = 1000,
MaxConcurrentSessions = 1000
};
Description.Behaviors.Add(throttle);
}
}
protected override void InitializeRuntime()
{
PollingDuplexBindingElement pdbe = new PollingDuplexBindingElement()
{
ServerPollTimeout = TimeSpan.FromSeconds(05),
InactivityTimeout = TimeSpan.FromSeconds(3600)
};
// Add an endpoint for the given service contract.
this.AddServiceEndpoint(
typeof(IJakayaChatService),
new CustomBinding(
pdbe,
new BinaryMessageEncodingBindingElement(),
new HttpTransportBindingElement()),
"");
// Add a metadata endpoint.
this.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");
base.InitializeRuntime();
}
}
答案 0 :(得分:0)
10连接限制通常归因于操作系统。例如,Windows XP具有10个连接限制,而服务器操作系统将允许在生产环境中使用更多连接。也就是说,问题可能仅限于您的开发环境,并在部署到更高端的操作系统时消失。
来自MS的笔记: 对于Windows XP Professional,允许通过网络同时连接的其他计算机的最大数量为10。此限制包括所有传输和资源共享协议的组合。对于Windows XP Home Edition,允许通过网络同时连接的其他计算机的最大数量为5。此限制是允许系统承载的其他计算机的同时会话数。此限制不适用于使用从远程计算机连接的管理工具。