TcpConnectionPool.cs 2.0 KB

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