//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------- namespace System.ServiceModel.Discovery { using System.ServiceModel.Channels; using System.Runtime; using System.Diagnostics.CodeAnalysis; using System.Globalization; static class DiscoveryDefaults { public static readonly TimeSpan DiscoveryOperationDuration = TimeSpan.Parse(DiscoveryOperationDurationString, CultureInfo.InvariantCulture); public static readonly Uri ScopeMatchBy = FindCriteria.ScopeMatchByPrefix; public const string DiscoveryOperationDurationString = "00:00:20"; public const int DuplicateMessageHistoryLength = 2 * 1028; public static class Udp { [SuppressMessage(FxCop.Category.Security, FxCop.Rule.DoNotDeclareReadOnlyMutableReferenceTypes)] public static readonly Uri IPv4MulticastAddress = new Uri(ProtocolStrings.Udp.MulticastIPv4Address); [SuppressMessage(FxCop.Category.Security, FxCop.Rule.DoNotDeclareReadOnlyMutableReferenceTypes)] public static readonly Uri IPv6MulticastAddress = new Uri(ProtocolStrings.Udp.MulticastIPv6Address); public static readonly TimeSpan AppMaxDelay = TimeSpan.Parse(AppMaxDelayString, CultureInfo.InvariantCulture); public const string AppMaxDelayString = "00:00:00.500"; public const int DuplicateMessageHistoryLength = 4 * 1028; public const int MaxUnicastRetransmitCount = 1; public const int MaxMulticastRetransmitCount = 2; public static UdpTransportBindingElement CreateUdpTransportBindingElement() { UdpTransportBindingElement udpBE = new UdpTransportBindingElement(); udpBE.RetransmissionSettings.MaxUnicastRetransmitCount = MaxUnicastRetransmitCount; udpBE.RetransmissionSettings.MaxMulticastRetransmitCount = MaxMulticastRetransmitCount; udpBE.RetransmissionSettings.DelayLowerBound = TimeSpan.FromMilliseconds(50); udpBE.RetransmissionSettings.DelayUpperBound = TimeSpan.FromMilliseconds(250); udpBE.RetransmissionSettings.MaxDelayPerRetransmission = TimeSpan.FromMilliseconds(500); udpBE.DuplicateMessageHistoryLength = DuplicateMessageHistoryLength; // The default value of ManualAddressing on UDP transport is false. // In discovery case, the discovery endpoints will receive all kinds of discovery messages, which sometimes // don't match the service contract. In this case, we want the discovery endpoint to ---- the errors // instead of sending fault messages back. So we need to disable auto addressing for the discovery scenario. udpBE.ManualAddressing = true; return udpBE; } } } }