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
- BaseResourcesBuildProvider.cs
- Transactions.cs
- DesignBindingPropertyDescriptor.cs
- InitializeCorrelation.cs
- MediaElement.cs
- CaseInsensitiveOrdinalStringComparer.cs
- Frame.cs
- TranslateTransform.cs
- ObjectSet.cs
- BaseComponentEditor.cs
- XmlSchemaInclude.cs
- MachineKeySection.cs
- ClientSettings.cs
- ColumnMap.cs
- IncrementalHitTester.cs
- DataSourceUtil.cs
- DataSourceHelper.cs
- SortQuery.cs
- PropertyStore.cs
- BookmarkList.cs
- MessageTraceRecord.cs
- Effect.cs
- ProjectionPruner.cs
- CodeEntryPointMethod.cs
- WriterOutput.cs
- ExpressionBuilderContext.cs
- Highlights.cs
- ClientFormsAuthenticationCredentials.cs
- InputEventArgs.cs
- UITypeEditor.cs
- OdbcConnectionOpen.cs
- ActiveXHelper.cs
- XsltSettings.cs
- WebPartCollection.cs
- TypeCollectionDesigner.xaml.cs
- clipboard.cs
- RotationValidation.cs
- XmlSchemaExporter.cs
- SessionStateItemCollection.cs
- SBCSCodePageEncoding.cs
- PointCollectionConverter.cs
- FaultCode.cs
- TableItemPattern.cs
- Listbox.cs
- EdmEntityTypeAttribute.cs
- TraceEventCache.cs
- ToolStripPanelRenderEventArgs.cs
- CultureSpecificStringDictionary.cs
- InternalBase.cs
- StoryFragments.cs
- BitmapSizeOptions.cs
- BufferBuilder.cs
- Int64Converter.cs
- ElementsClipboardData.cs
- TextShapeableCharacters.cs
- IgnoreFileBuildProvider.cs
- MetadataException.cs
- _CookieModule.cs
- Dynamic.cs
- CallTemplateAction.cs
- BaseCAMarshaler.cs
- MultiByteCodec.cs
- CorrelationManager.cs
- ListViewDataItem.cs
- FreezableCollection.cs
- SecurityDocument.cs
- XmlWhitespace.cs
- RefreshPropertiesAttribute.cs
- WebException.cs
- WebScriptEnablingElement.cs
- Menu.cs
- BookmarkEventArgs.cs
- DBSchemaRow.cs
- Assign.cs
- SettingsPropertyValue.cs
- GenericWebPart.cs
- XmlAttribute.cs
- Single.cs
- CompareInfo.cs
- MembershipPasswordException.cs
- DetailsViewInsertEventArgs.cs
- LinearGradientBrush.cs
- ObjectViewEntityCollectionData.cs
- ResourceSetExpression.cs
- WebPartTransformerCollection.cs
- XpsPackagingException.cs
- HierarchicalDataBoundControl.cs
- ThousandthOfEmRealPoints.cs
- MessageDecoder.cs
- HttpResponseInternalWrapper.cs
- streamingZipPartStream.cs
- NameHandler.cs
- PerformanceCountersElement.cs
- UserControlFileEditor.cs
- AlphaSortedEnumConverter.cs
- ArgumentNullException.cs
- CodeDelegateInvokeExpression.cs
- DataGridViewColumnTypePicker.cs
- FocusChangedEventArgs.cs
- DES.cs