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
- OleDbDataReader.cs
- SqlParameterizer.cs
- UrlPropertyAttribute.cs
- PeerInputChannel.cs
- Point3DCollection.cs
- StrongNameMembershipCondition.cs
- hresults.cs
- SectionXmlInfo.cs
- XmlParserContext.cs
- FlowLayoutSettings.cs
- ViewCellSlot.cs
- StreamResourceInfo.cs
- Permission.cs
- DataServiceQueryProvider.cs
- FacetDescriptionElement.cs
- SamlAssertionKeyIdentifierClause.cs
- ViewKeyConstraint.cs
- EntityKeyElement.cs
- CodeTypeParameter.cs
- SynchronizationScope.cs
- ObjectDataSourceChooseMethodsPanel.cs
- PropertySourceInfo.cs
- SymbolEqualComparer.cs
- Rotation3DAnimationBase.cs
- WindowsFormsHostPropertyMap.cs
- ShapingWorkspace.cs
- MediaSystem.cs
- PropertySet.cs
- DataGridViewColumnCollection.cs
- ArraySegment.cs
- ClrPerspective.cs
- TemplatePartAttribute.cs
- ListCollectionView.cs
- _NestedMultipleAsyncResult.cs
- TouchPoint.cs
- SQLDateTime.cs
- ToolTipAutomationPeer.cs
- TagMapInfo.cs
- Popup.cs
- WorkflowQueueInfo.cs
- AdornedElementPlaceholder.cs
- ClientSettingsStore.cs
- Repeater.cs
- ZipPackage.cs
- Regex.cs
- ElapsedEventArgs.cs
- ListViewInsertEventArgs.cs
- webbrowsersite.cs
- RegexMatch.cs
- OutputCacheSection.cs
- Deflater.cs
- PipelineDeploymentState.cs
- XmlnsDefinitionAttribute.cs
- ActivityTrace.cs
- OleServicesContext.cs
- StorageEntityTypeMapping.cs
- SqlProvider.cs
- CompositeFontInfo.cs
- SpoolingTask.cs
- ErrorRuntimeConfig.cs
- __FastResourceComparer.cs
- FileNotFoundException.cs
- TextEvent.cs
- TableLayoutPanelResizeGlyph.cs
- RefExpr.cs
- Transform3DGroup.cs
- AssemblyResourceLoader.cs
- KnownTypeHelper.cs
- PerfService.cs
- Parser.cs
- AccessText.cs
- ListViewUpdatedEventArgs.cs
- DbConnectionPoolOptions.cs
- GenericTextProperties.cs
- EmptyElement.cs
- HttpRuntime.cs
- DefaultMemberAttribute.cs
- SqlConnectionFactory.cs
- BitmapMetadata.cs
- DiscoveryMessageProperty.cs
- ListViewDeleteEventArgs.cs
- HotSpot.cs
- ConfigXmlCDataSection.cs
- TransactionContextValidator.cs
- TCPListener.cs
- RankException.cs
- AtomicFile.cs
- RMEnrollmentPage2.cs
- URL.cs
- TextSimpleMarkerProperties.cs
- QilDataSource.cs
- HttpFileCollectionWrapper.cs
- BitmapEffectGeneralTransform.cs
- HostVisual.cs
- Queue.cs
- PagerStyle.cs
- HandleRef.cs
- DesignBindingPropertyDescriptor.cs
- FormattedText.cs
- EncodingTable.cs