Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / System.ServiceModel.Activation / System / ServiceModel / Activation / ServiceHttpModule.cs / 1305376 / ServiceHttpModule.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Diagnostics; using System.Runtime; using System.Security; using System.ServiceModel; using System.Web; class ServiceHttpModule : IHttpModule { [Fx.Tag.SecurityNote(Critical = "Holds pointer to BeginProcessRequest which is SecurityCritical." + "This callback is called outside the PermitOnly context.")] [SecurityCritical] static BeginEventHandler beginEventHandler; //no need to invoke callback for non-WCF requests. static CompletedAsyncResult cachedAsyncResult = new CompletedAsyncResult(null, null); [Fx.Tag.SecurityNote(Critical = "This callback is called outside the PermitOnly context.")] [SecurityCritical] static EndEventHandler endEventHandler; static bool disabled; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - called outside PermitOnly context.")] public void Dispose() { } [Fx.Tag.SecurityNote(Critical = "Entry-point from ASP.NET, accesses begin/bndProcessRequest which are SecurityCritical.")] [SecurityCritical] public void Init(HttpApplication context) { if (ServiceHttpModule.beginEventHandler == null) { ServiceHttpModule.beginEventHandler = new BeginEventHandler(BeginProcessRequest); } if (ServiceHttpModule.endEventHandler == null) { ServiceHttpModule.endEventHandler = new EndEventHandler(EndProcessRequest); } context.AddOnPostAuthenticateRequestAsync( ServiceHttpModule.beginEventHandler, ServiceHttpModule.endEventHandler); } [Fx.Tag.SecurityNote(Critical = "Entry-point from asp.net, called outside PermitOnly context. ASP.NET calls are critical." + "HostedHttpRequestAsyncResult..ctor is critical because it captures HostedImpersonationContext (and makes it available later) " + "so caller must ensure that this is called in the right place.")] [SecurityCritical] static public IAsyncResult BeginProcessRequest(object sender, EventArgs e, AsyncCallback cb, object extraData) { if (ServiceHttpModule.disabled) { return cachedAsyncResult; } try { ServiceHostingEnvironment.SafeEnsureInitialized(); } catch (SecurityException exception) { ServiceHttpModule.disabled = true; if (DiagnosticUtility.ShouldTraceWarning) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Warning); } // If requesting a .svc file, the HttpHandler will try to handle it. It will call // SafeEnsureInitialized() again, which will fail with the same exception (it is // idempotent on failure). This is the correct behavior. return cachedAsyncResult; } HttpApplication application = (HttpApplication) sender; // Check to see whether the extension is supported. string extension = application.Request.CurrentExecutionFilePathExtension; if (string.IsNullOrEmpty(extension)) { return cachedAsyncResult; } ServiceHostingEnvironment.ServiceType serviceType = ServiceHostingEnvironment.GetServiceType(extension); // do extension check first so that we do not need to do it in aspnetrouting/configurationbasedactivation if (serviceType == ServiceHostingEnvironment.ServiceType.Unknown) { return cachedAsyncResult; } // check for AspNetcompat if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { // remap httphandler for xamlx in CBA, since there is No physical file and // the xamlx httphandlerfactory will do file exist checking if (serviceType == ServiceHostingEnvironment.ServiceType.Workflow && ServiceHostingEnvironment.IsConfigurationBasedService(application)) { IHttpHandler cbaHandler = new ServiceHttpHandlerFactory().GetHandler( application.Context, application.Request.RequestType, application.Request.RawUrl.ToString(), application.Request.PhysicalApplicationPath); application.Context.RemapHandler(cbaHandler); } return cachedAsyncResult; } if (serviceType == ServiceHostingEnvironment.ServiceType.WCF) { return new HostedHttpRequestAsyncResult(application, false, false, cb, extraData); } if (serviceType == ServiceHostingEnvironment.ServiceType.Workflow) { return new HostedHttpRequestAsyncResult(application, false, true, cb, extraData); } return cachedAsyncResult; } [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - called outside PermitOnly context.")] static public void EndProcessRequest(IAsyncResult ar) { //No need to call CompletedAsyncResult.End as the asyncResult has already completed. if (ar is HostedHttpRequestAsyncResult) { HostedHttpRequestAsyncResult.End(ar); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Activation { using System.Diagnostics; using System.Runtime; using System.Security; using System.ServiceModel; using System.Web; class ServiceHttpModule : IHttpModule { [Fx.Tag.SecurityNote(Critical = "Holds pointer to BeginProcessRequest which is SecurityCritical." + "This callback is called outside the PermitOnly context.")] [SecurityCritical] static BeginEventHandler beginEventHandler; //no need to invoke callback for non-WCF requests. static CompletedAsyncResult cachedAsyncResult = new CompletedAsyncResult(null, null); [Fx.Tag.SecurityNote(Critical = "This callback is called outside the PermitOnly context.")] [SecurityCritical] static EndEventHandler endEventHandler; static bool disabled; [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - called outside PermitOnly context.")] public void Dispose() { } [Fx.Tag.SecurityNote(Critical = "Entry-point from ASP.NET, accesses begin/bndProcessRequest which are SecurityCritical.")] [SecurityCritical] public void Init(HttpApplication context) { if (ServiceHttpModule.beginEventHandler == null) { ServiceHttpModule.beginEventHandler = new BeginEventHandler(BeginProcessRequest); } if (ServiceHttpModule.endEventHandler == null) { ServiceHttpModule.endEventHandler = new EndEventHandler(EndProcessRequest); } context.AddOnPostAuthenticateRequestAsync( ServiceHttpModule.beginEventHandler, ServiceHttpModule.endEventHandler); } [Fx.Tag.SecurityNote(Critical = "Entry-point from asp.net, called outside PermitOnly context. ASP.NET calls are critical." + "HostedHttpRequestAsyncResult..ctor is critical because it captures HostedImpersonationContext (and makes it available later) " + "so caller must ensure that this is called in the right place.")] [SecurityCritical] static public IAsyncResult BeginProcessRequest(object sender, EventArgs e, AsyncCallback cb, object extraData) { if (ServiceHttpModule.disabled) { return cachedAsyncResult; } try { ServiceHostingEnvironment.SafeEnsureInitialized(); } catch (SecurityException exception) { ServiceHttpModule.disabled = true; if (DiagnosticUtility.ShouldTraceWarning) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Warning); } // If requesting a .svc file, the HttpHandler will try to handle it. It will call // SafeEnsureInitialized() again, which will fail with the same exception (it is // idempotent on failure). This is the correct behavior. return cachedAsyncResult; } HttpApplication application = (HttpApplication) sender; // Check to see whether the extension is supported. string extension = application.Request.CurrentExecutionFilePathExtension; if (string.IsNullOrEmpty(extension)) { return cachedAsyncResult; } ServiceHostingEnvironment.ServiceType serviceType = ServiceHostingEnvironment.GetServiceType(extension); // do extension check first so that we do not need to do it in aspnetrouting/configurationbasedactivation if (serviceType == ServiceHostingEnvironment.ServiceType.Unknown) { return cachedAsyncResult; } // check for AspNetcompat if (ServiceHostingEnvironment.AspNetCompatibilityEnabled) { // remap httphandler for xamlx in CBA, since there is No physical file and // the xamlx httphandlerfactory will do file exist checking if (serviceType == ServiceHostingEnvironment.ServiceType.Workflow && ServiceHostingEnvironment.IsConfigurationBasedService(application)) { IHttpHandler cbaHandler = new ServiceHttpHandlerFactory().GetHandler( application.Context, application.Request.RequestType, application.Request.RawUrl.ToString(), application.Request.PhysicalApplicationPath); application.Context.RemapHandler(cbaHandler); } return cachedAsyncResult; } if (serviceType == ServiceHostingEnvironment.ServiceType.WCF) { return new HostedHttpRequestAsyncResult(application, false, false, cb, extraData); } if (serviceType == ServiceHostingEnvironment.ServiceType.Workflow) { return new HostedHttpRequestAsyncResult(application, false, true, cb, extraData); } return cachedAsyncResult; } [Fx.Tag.SecurityNote(Miscellaneous = "RequiresReview - called outside PermitOnly context.")] static public void EndProcessRequest(IAsyncResult ar) { //No need to call CompletedAsyncResult.End as the asyncResult has already completed. if (ar is HostedHttpRequestAsyncResult) { HostedHttpRequestAsyncResult.End(ar); } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FileSecurity.cs
- WorkflowElementDialog.cs
- NameValueCollection.cs
- odbcmetadatafactory.cs
- Int64AnimationUsingKeyFrames.cs
- EntitySqlQueryCacheKey.cs
- FileDataSourceCache.cs
- URL.cs
- NetworkStream.cs
- Executor.cs
- ChainedAsyncResult.cs
- GC.cs
- WebPartConnectionsCancelEventArgs.cs
- TextProperties.cs
- SymmetricKey.cs
- SoapMessage.cs
- TextParagraphView.cs
- HttpFileCollectionBase.cs
- TransformedBitmap.cs
- DbReferenceCollection.cs
- InvalidOperationException.cs
- ClassHandlersStore.cs
- Verify.cs
- UTF8Encoding.cs
- WebServiceClientProxyGenerator.cs
- TimeoutException.cs
- XAMLParseException.cs
- QueryableFilterRepeater.cs
- TextPattern.cs
- ServiceDescriptionSerializer.cs
- EdmMember.cs
- Byte.cs
- SrgsRulesCollection.cs
- InputScopeNameConverter.cs
- BaseConfigurationRecord.cs
- Merger.cs
- DataRowComparer.cs
- BoolLiteral.cs
- BrowserDefinition.cs
- InfocardInteractiveChannelInitializer.cs
- CodePageEncoding.cs
- MetadataArtifactLoaderComposite.cs
- SourceFilter.cs
- DataSourceDescriptorCollection.cs
- WindowProviderWrapper.cs
- SqlServices.cs
- DetailsViewModeEventArgs.cs
- DbConnectionFactory.cs
- BitmapSource.cs
- CodeCompiler.cs
- PlainXmlSerializer.cs
- RequestCachePolicy.cs
- XmlObjectSerializer.cs
- TimeSpanSecondsConverter.cs
- DataDocumentXPathNavigator.cs
- DifferencingCollection.cs
- OperatorExpressions.cs
- ExpanderAutomationPeer.cs
- AdornerHitTestResult.cs
- Int32AnimationUsingKeyFrames.cs
- XmlBinaryWriter.cs
- ToolBarButtonClickEvent.cs
- SafePEFileHandle.cs
- MenuItemStyle.cs
- ElapsedEventArgs.cs
- ThreadExceptionEvent.cs
- IndexedEnumerable.cs
- HtmlWindow.cs
- X509Certificate2.cs
- SQLStringStorage.cs
- Array.cs
- PolicyException.cs
- OracleCommand.cs
- ObjectViewEntityCollectionData.cs
- ObjectSet.cs
- PathSegmentCollection.cs
- ScriptIgnoreAttribute.cs
- XPathBinder.cs
- System.Data_BID.cs
- DisplayNameAttribute.cs
- CodeTypeDeclaration.cs
- OdbcDataReader.cs
- DataSourceXmlClassAttribute.cs
- XmlSchemaExternal.cs
- ListControlDesigner.cs
- XmlSerializerSection.cs
- CheckBoxField.cs
- CultureSpecificStringDictionary.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- EntityDataSourceQueryBuilder.cs
- SelectQueryOperator.cs
- PerformanceCounterPermissionEntryCollection.cs
- XmlRootAttribute.cs
- DistinctQueryOperator.cs
- OuterProxyWrapper.cs
- SchemaCompiler.cs
- DataControlExtensions.cs
- SafeMemoryMappedFileHandle.cs
- SqlServices.cs
- ChangeConflicts.cs