1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------------------------
namespace System.ServiceModel.Channels
{
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Net;
using System.Net.Sockets;
using System.Globalization;
using System.ServiceModel.Diagnostics;
class TcpConnectionPoolRegistry : ConnectionPoolRegistry
{
public TcpConnectionPoolRegistry()
: base()
{
}
protected override ConnectionPool CreatePool(IConnectionOrientedTransportChannelFactorySettings settings)
{
ITcpChannelFactorySettings tcpSettings = (ITcpChannelFactorySettings)settings;
return new TcpConnectionPool(tcpSettings);
}
class TcpConnectionPool : ConnectionPool
{
public TcpConnectionPool(ITcpChannelFactorySettings settings)
: base(settings, settings.LeaseTimeout)
{
}
protected override string GetPoolKey(EndpointAddress address, Uri via)
{
int port = via.Port;
if (port == -1)
{
port = TcpUri.DefaultPort;
}
string normalizedHost = via.DnsSafeHost.ToUpperInvariant();
return string.Format(CultureInfo.InvariantCulture, @"[{0}, {1}]", normalizedHost, port);
}
public override bool IsCompatible(IConnectionOrientedTransportChannelFactorySettings settings)
{
ITcpChannelFactorySettings tcpSettings = (ITcpChannelFactorySettings)settings;
return (
(this.LeaseTimeout == tcpSettings.LeaseTimeout) &&
base.IsCompatible(settings)
);
}
}
}
}
|