Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / DnsCache.cs / 1 / DnsCache.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Security.Permissions; using System.ServiceModel; using System.ServiceModel.Dispatcher; using System.Text; static class DnsCache { const int mruWatermark = 64; static MruCacheresolveCache = new MruCache (mruWatermark); static readonly TimeSpan cacheTimeout = TimeSpan.FromSeconds(2); static string machineName; static object ThisLock { get { return resolveCache; } } public static string MachineName { get { if (machineName == null) { lock (ThisLock) { if (machineName == null) { try { machineName = Dns.GetHostEntry(String.Empty).HostName; } catch (SocketException exception) { if (DiagnosticUtility.ShouldTraceInformation) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Information); } // we fall back to the NetBios machine if Dns fails machineName = UnsafeNativeMethods.GetComputerName(ComputerNameFormat.PhysicalNetBIOS); } } } } return machineName; } } public static IPHostEntry Resolve(string hostName) { IPHostEntry hostEntry = null; DateTime now = DateTime.UtcNow; lock (ThisLock) { DnsCacheEntry cacheEntry; if (resolveCache.TryGetValue(hostName, out cacheEntry)) { if (now.Subtract(cacheEntry.TimeStamp) > cacheTimeout) { resolveCache.Remove(hostName); } else { if (cacheEntry.HostEntry == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new EndpointNotFoundException(SR.GetString(SR.DnsResolveFailed, hostName))); } hostEntry = cacheEntry.HostEntry; } } } if (hostEntry == null) { SocketException dnsException = null; try { hostEntry = Dns.GetHostEntry(hostName); } catch (SocketException e) { dnsException = e; } lock (ThisLock) { // MruCache doesn't have a this[] operator, so we first remove (just in case it exists already) resolveCache.Remove(hostName); resolveCache.Add(hostName, new DnsCacheEntry(hostEntry, now)); } if (dnsException != null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new EndpointNotFoundException(SR.GetString(SR.DnsResolveFailed, hostName), dnsException)); } } return hostEntry; } class DnsCacheEntry { IPHostEntry hostEntry; DateTime timeStamp; public DnsCacheEntry(IPHostEntry hostEntry, DateTime timeStamp) { this.hostEntry = hostEntry; this.timeStamp = timeStamp; } public IPHostEntry HostEntry { get { return hostEntry; } } public DateTime TimeStamp { get { return timeStamp; } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EraserBehavior.cs
- PersonalizationProviderHelper.cs
- VisualStyleRenderer.cs
- RadioButtonDesigner.cs
- HttpModuleAction.cs
- Int64AnimationBase.cs
- WebPartZoneBaseDesigner.cs
- SmiSettersStream.cs
- TreeNodeEventArgs.cs
- SecurityElement.cs
- TextRunTypographyProperties.cs
- EnumerationRangeValidationUtil.cs
- SqlVersion.cs
- RectKeyFrameCollection.cs
- WebScriptServiceHost.cs
- Font.cs
- UnaryNode.cs
- cryptoapiTransform.cs
- TextTreeFixupNode.cs
- CngAlgorithm.cs
- JsonDataContract.cs
- BoolExpr.cs
- UnsignedPublishLicense.cs
- ToolboxItemFilterAttribute.cs
- InternalBufferOverflowException.cs
- SqlNodeTypeOperators.cs
- StyleHelper.cs
- ComboBox.cs
- MatchNoneMessageFilter.cs
- WindowsStartMenu.cs
- ExtensionQuery.cs
- TreeIterator.cs
- Parser.cs
- XmlSerializationGeneratedCode.cs
- DiagnosticsConfigurationHandler.cs
- FaultReasonText.cs
- HttpRequest.cs
- CursorInteropHelper.cs
- NamedPipeTransportBindingElement.cs
- OracleParameterCollection.cs
- TypeHelpers.cs
- BufferedWebEventProvider.cs
- SharedPersonalizationStateInfo.cs
- XmlCharType.cs
- IIS7WorkerRequest.cs
- ServicePointManagerElement.cs
- NativeCppClassAttribute.cs
- ConfigXmlSignificantWhitespace.cs
- ObjectDataSourceStatusEventArgs.cs
- Privilege.cs
- arabicshape.cs
- ListViewInsertionMark.cs
- EndpointDiscoveryElement.cs
- InternalBase.cs
- CustomTypeDescriptor.cs
- DetailsViewCommandEventArgs.cs
- SizeChangedEventArgs.cs
- AlgoModule.cs
- DataGridViewRowCollection.cs
- NamedPermissionSet.cs
- DictionaryChange.cs
- DynamicDiscoveryDocument.cs
- ClientSponsor.cs
- SizeKeyFrameCollection.cs
- SystemInformation.cs
- LabelLiteral.cs
- ControlType.cs
- SoapUnknownHeader.cs
- NamespaceQuery.cs
- VisualProxy.cs
- ConfigsHelper.cs
- EdmComplexTypeAttribute.cs
- RuleSetDialog.Designer.cs
- PathStreamGeometryContext.cs
- XPathDocumentNavigator.cs
- MetaType.cs
- ObjectItemCollection.cs
- Point3DAnimation.cs
- GridViewSelectEventArgs.cs
- DataGridAutomationPeer.cs
- EventHandlerList.cs
- _CacheStreams.cs
- RequestTimeoutManager.cs
- BufferedStream2.cs
- CustomServiceCredentials.cs
- PlainXmlDeserializer.cs
- DomainConstraint.cs
- OledbConnectionStringbuilder.cs
- ReferenceConverter.cs
- MulticastDelegate.cs
- PenThreadWorker.cs
- shaperfactoryquerycacheentry.cs
- TaskDesigner.cs
- HelpKeywordAttribute.cs
- EventSetter.cs
- XmlSchemaAttributeGroupRef.cs
- PatternMatchRules.cs
- ContainerAction.cs
- XmlNamedNodeMap.cs
- SocketException.cs