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
- ParentUndoUnit.cs
- SByte.cs
- ConfigurationStrings.cs
- EpmSourcePathSegment.cs
- HtmlInputText.cs
- ImageCollectionEditor.cs
- KnownColorTable.cs
- DataSourceCache.cs
- Item.cs
- DataMemberListEditor.cs
- PolyBezierSegment.cs
- WebPartActionVerb.cs
- Margins.cs
- FixedSOMImage.cs
- EnvelopeVersion.cs
- DrawingCollection.cs
- CodePageEncoding.cs
- CodeMemberEvent.cs
- AnimationTimeline.cs
- MultipleCopiesCollection.cs
- ScaleTransform3D.cs
- MSHTMLHost.cs
- UnauthorizedWebPart.cs
- VisualProxy.cs
- InfoCardRSAPKCS1KeyExchangeFormatter.cs
- RegexTypeEditor.cs
- ProtocolsConfigurationEntry.cs
- RankException.cs
- TypeFieldSchema.cs
- DataListItem.cs
- SqlPersonalizationProvider.cs
- EncoderReplacementFallback.cs
- EntitySqlQueryBuilder.cs
- TextBoxBaseDesigner.cs
- AppDomainEvidenceFactory.cs
- ReferenceEqualityComparer.cs
- DependencyPropertyKey.cs
- ColumnClickEvent.cs
- PresentationUIStyleResources.cs
- DetailsViewCommandEventArgs.cs
- TitleStyle.cs
- SubstitutionList.cs
- NativeMethods.cs
- ColorInterpolationModeValidation.cs
- TraceSection.cs
- HandleCollector.cs
- AppDomainProtocolHandler.cs
- ConnectivityStatus.cs
- MediaElementAutomationPeer.cs
- OLEDB_Enum.cs
- XmlText.cs
- ExpressionPrinter.cs
- UIInitializationException.cs
- ApplicationCommands.cs
- StreamResourceInfo.cs
- SelectionHighlightInfo.cs
- FilterQueryOptionExpression.cs
- SystemTcpConnection.cs
- ColumnMapCopier.cs
- WSTransactionSection.cs
- Preprocessor.cs
- DataShape.cs
- TraceContextRecord.cs
- RelationshipEntry.cs
- ToolStripPanelDesigner.cs
- SQLInt64Storage.cs
- StoreAnnotationsMap.cs
- CollectionEditorDialog.cs
- NonBatchDirectoryCompiler.cs
- IdentityNotMappedException.cs
- ServiceModelActivationSectionGroup.cs
- ToolBarButton.cs
- ValidatedControlConverter.cs
- _SslState.cs
- XmlSchemaAttributeGroupRef.cs
- XmlJsonWriter.cs
- UnsafeNativeMethods.cs
- SqlLiftWhereClauses.cs
- FixedTextPointer.cs
- UshortList2.cs
- DateTimePicker.cs
- DataGridViewUtilities.cs
- Encoder.cs
- ClientConvert.cs
- DataSvcMapFile.cs
- ToolStripSeparatorRenderEventArgs.cs
- DrawingGroup.cs
- XmlIlTypeHelper.cs
- RegexCaptureCollection.cs
- ListItemCollection.cs
- ReferenceEqualityComparer.cs
- ManipulationStartedEventArgs.cs
- SiteMapNodeItem.cs
- StagingAreaInputItem.cs
- SecurityDescriptor.cs
- FtpRequestCacheValidator.cs
- Buffer.cs
- NavigateEvent.cs
- Selection.cs
- ComplexPropertyEntry.cs