Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / Orcas / NetFXw7 / wpf / src / Core / CSharp / MS / Internal / AppModel / SiteOfOriginPart.cs / 1 / SiteOfOriginPart.cs
//------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // SiteOfOriginPart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore. // // History: // 6/16/2005: Erichar - Initial creation. // //----------------------------------------------------------------------------- using System; using System.Net; using System.IO.Packaging; using System.Windows; using System.Windows.Navigation; using System.Windows.Resources; using System.IO; using System.Resources; using System.Globalization; using MS.Internal.PresentationCore; namespace MS.Internal.AppModel { ////// SiteOfOriginPart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore. /// internal class SiteOfOriginPart : System.IO.Packaging.PackagePart { //----------------------------------------------------- // // Public Constructors // //----------------------------------------------------- #region Public Constructors internal SiteOfOriginPart(Package container, Uri uri) : base(container, uri) { } #endregion //------------------------------------------------------ // // Protected Methods // //----------------------------------------------------- #region Protected Methods protected override Stream GetStreamCore(FileMode mode, FileAccess access) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting stream."); #endif return GetStreamAndSetContentType(false); } protected override string GetContentTypeCore() { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting content type."); #endif GetStreamAndSetContentType(true); return _contentType.ToString(); } #endregion //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods private Stream GetStreamAndSetContentType(bool onlyNeedContentType) { lock (_globalLock) { if (onlyNeedContentType && _contentType != MS.Internal.ContentType.Empty) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting content type and using previously determined value"); #endif return null; } // If GetContentTypeCore is called before GetStream() // then we need to retrieve the stream to get the mime type. // That stream is then stored as _cacheStream and returned // the next time GetStreamCore() is called. if (_cacheStream != null) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + "SiteOfOriginPart: Using Cached stream"); #endif Stream temp = _cacheStream; _cacheStream = null; return temp; } if (_absoluteLocation == null) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Determining absolute uri for this resource"); #endif string original = Uri.ToString(); Invariant.Assert(original[0] == '/'); string uriMinusInitialSlash = original.Substring(1); // trim leading '/' _absoluteLocation = new Uri(SiteOfOriginContainer.SiteOfOrigin, uriMinusInitialSlash); } #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Making web request to " + _absoluteLocation); #endif // For performance reasons it is better to open local files directly // rather than make a FileWebRequest. Stream responseStream; if (SecurityHelper.AreStringTypesEqual(_absoluteLocation.Scheme, Uri.UriSchemeFile)) { responseStream = HandleFileSource(onlyNeedContentType); } else { responseStream = HandleWebSource(onlyNeedContentType); } return responseStream; } } private Stream HandleFileSource(bool onlyNeedContentType) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": Opening local file " + _absoluteLocation); #endif if (_contentType == MS.Internal.ContentType.Empty) { _contentType = MS.Internal.MimeTypeMapper.GetMimeTypeFromUri(Uri); } if (!onlyNeedContentType) { return File.OpenRead(_absoluteLocation.LocalPath); } return null; } private Stream HandleWebSource(bool onlyNeedContentType) { WebResponse response = WpfWebRequestHelper.CreateRequestAndGetResponse(_absoluteLocation); Stream responseStream = response.GetResponseStream(); #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": Successfully retrieved stream from " + _absoluteLocation); #endif if (_contentType == MS.Internal.ContentType.Empty) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Setting _contentType"); #endif _contentType = WpfWebRequestHelper.GetContentType(response); } if (onlyNeedContentType) { _cacheStream = responseStream; } return responseStream; } #endregion //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Members Uri _absoluteLocation = null; ContentType _contentType = MS.Internal.ContentType.Empty; Stream _cacheStream = null; private Object _globalLock = new Object(); #endregion Private Members } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ // //// Copyright (C) Microsoft Corporation. All rights reserved. // // // Description: // SiteOfOriginPart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore. // // History: // 6/16/2005: Erichar - Initial creation. // //----------------------------------------------------------------------------- using System; using System.Net; using System.IO.Packaging; using System.Windows; using System.Windows.Navigation; using System.Windows.Resources; using System.IO; using System.Resources; using System.Globalization; using MS.Internal.PresentationCore; namespace MS.Internal.AppModel { ////// SiteOfOriginPart is an implementation of the abstract PackagePart class. It contains an override for GetStreamCore. /// internal class SiteOfOriginPart : System.IO.Packaging.PackagePart { //----------------------------------------------------- // // Public Constructors // //----------------------------------------------------- #region Public Constructors internal SiteOfOriginPart(Package container, Uri uri) : base(container, uri) { } #endregion //------------------------------------------------------ // // Protected Methods // //----------------------------------------------------- #region Protected Methods protected override Stream GetStreamCore(FileMode mode, FileAccess access) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting stream."); #endif return GetStreamAndSetContentType(false); } protected override string GetContentTypeCore() { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting content type."); #endif GetStreamAndSetContentType(true); return _contentType.ToString(); } #endregion //------------------------------------------------------ // // Private Methods // //------------------------------------------------------ #region Private Methods private Stream GetStreamAndSetContentType(bool onlyNeedContentType) { lock (_globalLock) { if (onlyNeedContentType && _contentType != MS.Internal.ContentType.Empty) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Getting content type and using previously determined value"); #endif return null; } // If GetContentTypeCore is called before GetStream() // then we need to retrieve the stream to get the mime type. // That stream is then stored as _cacheStream and returned // the next time GetStreamCore() is called. if (_cacheStream != null) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + "SiteOfOriginPart: Using Cached stream"); #endif Stream temp = _cacheStream; _cacheStream = null; return temp; } if (_absoluteLocation == null) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Determining absolute uri for this resource"); #endif string original = Uri.ToString(); Invariant.Assert(original[0] == '/'); string uriMinusInitialSlash = original.Substring(1); // trim leading '/' _absoluteLocation = new Uri(SiteOfOriginContainer.SiteOfOrigin, uriMinusInitialSlash); } #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Making web request to " + _absoluteLocation); #endif // For performance reasons it is better to open local files directly // rather than make a FileWebRequest. Stream responseStream; if (SecurityHelper.AreStringTypesEqual(_absoluteLocation.Scheme, Uri.UriSchemeFile)) { responseStream = HandleFileSource(onlyNeedContentType); } else { responseStream = HandleWebSource(onlyNeedContentType); } return responseStream; } } private Stream HandleFileSource(bool onlyNeedContentType) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": Opening local file " + _absoluteLocation); #endif if (_contentType == MS.Internal.ContentType.Empty) { _contentType = MS.Internal.MimeTypeMapper.GetMimeTypeFromUri(Uri); } if (!onlyNeedContentType) { return File.OpenRead(_absoluteLocation.LocalPath); } return null; } private Stream HandleWebSource(bool onlyNeedContentType) { WebResponse response = WpfWebRequestHelper.CreateRequestAndGetResponse(_absoluteLocation); Stream responseStream = response.GetResponseStream(); #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": Successfully retrieved stream from " + _absoluteLocation); #endif if (_contentType == MS.Internal.ContentType.Empty) { #if DEBUG if (SiteOfOriginContainer._traceSwitch.Enabled) System.Diagnostics.Trace.TraceInformation( DateTime.Now.ToLongTimeString() + " " + DateTime.Now.Millisecond + " " + System.Threading.Thread.CurrentThread.ManagedThreadId + ": SiteOfOriginPart: Setting _contentType"); #endif _contentType = WpfWebRequestHelper.GetContentType(response); } if (onlyNeedContentType) { _cacheStream = responseStream; } return responseStream; } #endregion //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Members Uri _absoluteLocation = null; ContentType _contentType = MS.Internal.ContentType.Empty; Stream _cacheStream = null; private Object _globalLock = new Object(); #endregion Private Members } } // 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
- DataGridTableCollection.cs
- Image.cs
- ProviderSettingsCollection.cs
- MembershipSection.cs
- Mapping.cs
- MultiAsyncResult.cs
- GradientBrush.cs
- Publisher.cs
- SerializeAbsoluteContext.cs
- OrderToken.cs
- WebEvents.cs
- StrokeRenderer.cs
- SingleSelectRootGridEntry.cs
- ContentElement.cs
- DataContext.cs
- ListItem.cs
- JoinTreeSlot.cs
- ProviderSettings.cs
- SessionEndingEventArgs.cs
- ListViewDesigner.cs
- NullableFloatMinMaxAggregationOperator.cs
- SoapReflectionImporter.cs
- DispatcherOperation.cs
- SecurityPermission.cs
- DetailsViewPagerRow.cs
- DeviceContexts.cs
- LoginView.cs
- PageBreakRecord.cs
- HostedElements.cs
- SQLString.cs
- MatrixConverter.cs
- IssuanceTokenProviderBase.cs
- SqlNamer.cs
- CustomAssemblyResolver.cs
- MimeTypePropertyAttribute.cs
- DataFormats.cs
- SqlConnectionHelper.cs
- XmlDownloadManager.cs
- WebPartsPersonalizationAuthorization.cs
- WebSysDescriptionAttribute.cs
- TripleDES.cs
- XmlRawWriter.cs
- BitmapEffectRenderDataResource.cs
- HtmlControlPersistable.cs
- DoubleAnimation.cs
- ListViewEditEventArgs.cs
- StylusPointProperties.cs
- Rect3D.cs
- XmlValidatingReaderImpl.cs
- DesignerSerializerAttribute.cs
- FixUp.cs
- CheckBoxList.cs
- MenuStrip.cs
- EncoderExceptionFallback.cs
- TreeViewItem.cs
- AssemblySettingAttributes.cs
- _SSPISessionCache.cs
- DecoderBestFitFallback.cs
- DrawingAttributeSerializer.cs
- ColorMatrix.cs
- Deflater.cs
- IFormattable.cs
- StateElementCollection.cs
- DropDownList.cs
- SecUtil.cs
- HttpListenerPrefixCollection.cs
- XamlClipboardData.cs
- TemplateApplicationHelper.cs
- SelectingProviderEventArgs.cs
- StrokeNodeOperations.cs
- ApplicationId.cs
- EncoderParameter.cs
- DataGridViewCellStyle.cs
- ImageMap.cs
- OrthographicCamera.cs
- FamilyMap.cs
- GeometryCombineModeValidation.cs
- HttpServerVarsCollection.cs
- Trace.cs
- BufferedConnection.cs
- StrongNameKeyPair.cs
- RouteParser.cs
- Model3DCollection.cs
- Effect.cs
- TypeConverter.cs
- HwndMouseInputProvider.cs
- XsdDataContractExporter.cs
- ServicePoint.cs
- EnumerableWrapperWeakToStrong.cs
- BamlRecords.cs
- UmAlQuraCalendar.cs
- AppearanceEditorPart.cs
- PersonalizationState.cs
- SectionInformation.cs
- WasHttpModulesInstallComponent.cs
- SByteConverter.cs
- AsmxEndpointPickerExtension.cs
- RegionIterator.cs
- SymmetricKeyWrap.cs
- AuthStoreRoleProvider.cs