Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Web / System / Web / Services / Protocols / DocumentationServerProtocol.cs / 1305376 / DocumentationServerProtocol.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System; using System.Collections; using System.IO; using System.Reflection; using System.Web.Services.Discovery; using System.Web.UI; using System.Diagnostics; using System.Web.Services.Configuration; using System.Xml.Serialization; using System.Xml.Schema; using System.Text; using System.Net; using System.Web.Services.Description; using System.Threading; using System.Web.Services.Diagnostics; using System.Security.Permissions; internal class DocumentationServerType : ServerType { ServiceDescriptionCollection serviceDescriptions, serviceDescriptionsWithPost; XmlSchemas schemas, schemasWithPost; LogicalMethodInfo methodInfo; internal DocumentationServerType(Type type, string uri) : base(typeof(DocumentationServerProtocol)) { // // parse the uri from a string into a URI object // Uri uriObject = new Uri(uri, true); // // and get rid of the query string if there's one // uri = uriObject.GetLeftPart(UriPartial.Path); methodInfo = new LogicalMethodInfo(typeof(DocumentationServerProtocol).GetMethod("Documentation", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)); ServiceDescriptionReflector reflector = new ServiceDescriptionReflector(); reflector.Reflect(type, uri); schemas = reflector.Schemas; serviceDescriptions = reflector.ServiceDescriptions; schemasWithPost = reflector.SchemasWithPost; serviceDescriptionsWithPost = reflector.ServiceDescriptionsWithPost; } internal LogicalMethodInfo MethodInfo { get { return methodInfo; } } internal XmlSchemas Schemas { get { return schemas; } } internal ServiceDescriptionCollection ServiceDescriptions { get { return serviceDescriptions; } } internal ServiceDescriptionCollection ServiceDescriptionsWithPost { get { return serviceDescriptionsWithPost; } } internal XmlSchemas SchemasWithPost { get { return schemasWithPost; } } } internal class DocumentationServerProtocolFactory : ServerProtocolFactory { protected override ServerProtocol CreateIfRequestCompatible(HttpRequest request){ if (request.PathInfo.Length > 0) return null; if (request.HttpMethod != "GET") // MethodNotAllowed = 405, return new UnsupportedRequestProtocol(405); return new DocumentationServerProtocol(); } } internal sealed class DocumentationServerProtocol : ServerProtocol { DocumentationServerType serverType; IHttpHandler handler = null; private const int MAX_PATH_SIZE = 1024; internal override bool Initialize() { // // see if we already cached a DocumentationServerType // serverType = (DocumentationServerType)GetFromCache(typeof(DocumentationServerProtocol), Type); if (serverType == null) { lock (InternalSyncObject) { serverType = (DocumentationServerType)GetFromCache(typeof(DocumentationServerProtocol), Type); if (serverType == null) { // // if not create a new DocumentationServerType and cache it // // string escapedUri = Uri.EscapeUriString(Request.Url.ToString()).Replace("#", "%23"); serverType = new DocumentationServerType(Type, escapedUri); AddToCache(typeof(DocumentationServerProtocol), Type, serverType); } } } WebServicesSection config = WebServicesSection.Current; if (config.WsdlHelpGenerator.Href != null && config.WsdlHelpGenerator.Href.Length > 0) { TraceMethod caller = Tracing.On ? new TraceMethod(this, "Initialize") : null; if (Tracing.On) Tracing.Enter("ASP.NET", caller, new TraceMethod(typeof(PageParser), "GetCompiledPageInstance", config.WsdlHelpGenerator.HelpGeneratorVirtualPath, config.WsdlHelpGenerator.HelpGeneratorPath, Context)); handler = GetCompiledPageInstance(config.WsdlHelpGenerator.HelpGeneratorVirtualPath, config.WsdlHelpGenerator.HelpGeneratorPath, Context); if (Tracing.On) Tracing.Exit("ASP.NET", caller); } return true; } // Asserts SecurityPermission and FileIOPermission. // Justification: Security Permission is demanded by PageParser.GetCompiledPageInstance() method. // It is used to initialize the IHttpHandler field of the DocumentationServerProtocol object. // FileIOPermission is required to access the inputFile passed in as a parameter. // It is used only to map the virtual path to the physical file path. The FileIOPermission is not used to access any file other than the one passed in. [SecurityPermission(SecurityAction.Assert, Unrestricted = true)] [FileIOPermissionAttribute(SecurityAction.Assert, Unrestricted = true)] private IHttpHandler GetCompiledPageInstance(string virtualPath, string inputFile, HttpContext context) { return PageParser.GetCompiledPageInstance(virtualPath, inputFile, context); } internal override ServerType ServerType { get { return serverType; } } internal override bool IsOneWay { get { return false; } } internal override LogicalMethodInfo MethodInfo { get { return serverType.MethodInfo; } } internal override object[] ReadParameters() { return new object[0]; } internal override void WriteReturns(object[] returnValues, Stream outputStream) { try { if (handler != null) { Context.Items.Add("wsdls", serverType.ServiceDescriptions); Context.Items.Add("schemas", serverType.Schemas); // conditionally add post-enabled wsdls and schemas to support localhost-only post if (Context.Request.Url.IsLoopback || Context.Request.IsLocal) { Context.Items.Add("wsdlsWithPost", serverType.ServiceDescriptionsWithPost); Context.Items.Add("schemasWithPost", serverType.SchemasWithPost); } Context.Items.Add("conformanceWarnings", WebServicesSection.Current.EnabledConformanceWarnings); Response.ContentType = "text/html"; handler.ProcessRequest(Context); } } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new InvalidOperationException(Res.GetString(Res.HelpGeneratorInternalError), e); } } internal override bool WriteException(Exception e, Stream outputStream) { return false; } internal void Documentation() { // This is the "server method" that is called for this protocol } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System; using System.Collections; using System.IO; using System.Reflection; using System.Web.Services.Discovery; using System.Web.UI; using System.Diagnostics; using System.Web.Services.Configuration; using System.Xml.Serialization; using System.Xml.Schema; using System.Text; using System.Net; using System.Web.Services.Description; using System.Threading; using System.Web.Services.Diagnostics; using System.Security.Permissions; internal class DocumentationServerType : ServerType { ServiceDescriptionCollection serviceDescriptions, serviceDescriptionsWithPost; XmlSchemas schemas, schemasWithPost; LogicalMethodInfo methodInfo; internal DocumentationServerType(Type type, string uri) : base(typeof(DocumentationServerProtocol)) { // // parse the uri from a string into a URI object // Uri uriObject = new Uri(uri, true); // // and get rid of the query string if there's one // uri = uriObject.GetLeftPart(UriPartial.Path); methodInfo = new LogicalMethodInfo(typeof(DocumentationServerProtocol).GetMethod("Documentation", BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)); ServiceDescriptionReflector reflector = new ServiceDescriptionReflector(); reflector.Reflect(type, uri); schemas = reflector.Schemas; serviceDescriptions = reflector.ServiceDescriptions; schemasWithPost = reflector.SchemasWithPost; serviceDescriptionsWithPost = reflector.ServiceDescriptionsWithPost; } internal LogicalMethodInfo MethodInfo { get { return methodInfo; } } internal XmlSchemas Schemas { get { return schemas; } } internal ServiceDescriptionCollection ServiceDescriptions { get { return serviceDescriptions; } } internal ServiceDescriptionCollection ServiceDescriptionsWithPost { get { return serviceDescriptionsWithPost; } } internal XmlSchemas SchemasWithPost { get { return schemasWithPost; } } } internal class DocumentationServerProtocolFactory : ServerProtocolFactory { protected override ServerProtocol CreateIfRequestCompatible(HttpRequest request){ if (request.PathInfo.Length > 0) return null; if (request.HttpMethod != "GET") // MethodNotAllowed = 405, return new UnsupportedRequestProtocol(405); return new DocumentationServerProtocol(); } } internal sealed class DocumentationServerProtocol : ServerProtocol { DocumentationServerType serverType; IHttpHandler handler = null; private const int MAX_PATH_SIZE = 1024; internal override bool Initialize() { // // see if we already cached a DocumentationServerType // serverType = (DocumentationServerType)GetFromCache(typeof(DocumentationServerProtocol), Type); if (serverType == null) { lock (InternalSyncObject) { serverType = (DocumentationServerType)GetFromCache(typeof(DocumentationServerProtocol), Type); if (serverType == null) { // // if not create a new DocumentationServerType and cache it // // string escapedUri = Uri.EscapeUriString(Request.Url.ToString()).Replace("#", "%23"); serverType = new DocumentationServerType(Type, escapedUri); AddToCache(typeof(DocumentationServerProtocol), Type, serverType); } } } WebServicesSection config = WebServicesSection.Current; if (config.WsdlHelpGenerator.Href != null && config.WsdlHelpGenerator.Href.Length > 0) { TraceMethod caller = Tracing.On ? new TraceMethod(this, "Initialize") : null; if (Tracing.On) Tracing.Enter("ASP.NET", caller, new TraceMethod(typeof(PageParser), "GetCompiledPageInstance", config.WsdlHelpGenerator.HelpGeneratorVirtualPath, config.WsdlHelpGenerator.HelpGeneratorPath, Context)); handler = GetCompiledPageInstance(config.WsdlHelpGenerator.HelpGeneratorVirtualPath, config.WsdlHelpGenerator.HelpGeneratorPath, Context); if (Tracing.On) Tracing.Exit("ASP.NET", caller); } return true; } // Asserts SecurityPermission and FileIOPermission. // Justification: Security Permission is demanded by PageParser.GetCompiledPageInstance() method. // It is used to initialize the IHttpHandler field of the DocumentationServerProtocol object. // FileIOPermission is required to access the inputFile passed in as a parameter. // It is used only to map the virtual path to the physical file path. The FileIOPermission is not used to access any file other than the one passed in. [SecurityPermission(SecurityAction.Assert, Unrestricted = true)] [FileIOPermissionAttribute(SecurityAction.Assert, Unrestricted = true)] private IHttpHandler GetCompiledPageInstance(string virtualPath, string inputFile, HttpContext context) { return PageParser.GetCompiledPageInstance(virtualPath, inputFile, context); } internal override ServerType ServerType { get { return serverType; } } internal override bool IsOneWay { get { return false; } } internal override LogicalMethodInfo MethodInfo { get { return serverType.MethodInfo; } } internal override object[] ReadParameters() { return new object[0]; } internal override void WriteReturns(object[] returnValues, Stream outputStream) { try { if (handler != null) { Context.Items.Add("wsdls", serverType.ServiceDescriptions); Context.Items.Add("schemas", serverType.Schemas); // conditionally add post-enabled wsdls and schemas to support localhost-only post if (Context.Request.Url.IsLoopback || Context.Request.IsLocal) { Context.Items.Add("wsdlsWithPost", serverType.ServiceDescriptionsWithPost); Context.Items.Add("schemasWithPost", serverType.SchemasWithPost); } Context.Items.Add("conformanceWarnings", WebServicesSection.Current.EnabledConformanceWarnings); Response.ContentType = "text/html"; handler.ProcessRequest(Context); } } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new InvalidOperationException(Res.GetString(Res.HelpGeneratorInternalError), e); } } internal override bool WriteException(Exception e, Stream outputStream) { return false; } internal void Documentation() { // This is the "server method" that is called for this protocol } } } // 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
- Assert.cs
- CatalogUtil.cs
- XsltQilFactory.cs
- ArgumentNullException.cs
- ConfigurationSchemaErrors.cs
- MouseGestureConverter.cs
- FunctionQuery.cs
- BitmapEffectGroup.cs
- StringTraceRecord.cs
- ReferentialConstraintRoleElement.cs
- Empty.cs
- SoapExtensionTypeElement.cs
- PtsCache.cs
- GridErrorDlg.cs
- DiagnosticsConfiguration.cs
- ParseHttpDate.cs
- InfoCardListRequest.cs
- LeafCellTreeNode.cs
- IItemContainerGenerator.cs
- Point.cs
- _LazyAsyncResult.cs
- ColorKeyFrameCollection.cs
- HybridWebProxyFinder.cs
- ModelUIElement3D.cs
- ConstrainedDataObject.cs
- WrapperSecurityCommunicationObject.cs
- RuleSettingsCollection.cs
- DockProviderWrapper.cs
- TypeLibConverter.cs
- EntityDataSourceMemberPath.cs
- ArglessEventHandlerProxy.cs
- ContextInformation.cs
- SqlCommand.cs
- log.cs
- TextFormatterHost.cs
- PaintValueEventArgs.cs
- precedingsibling.cs
- PersonalizationProviderHelper.cs
- AssemblyResourceLoader.cs
- BitmapEffectInput.cs
- EncodingStreamWrapper.cs
- ObjectListCommandCollection.cs
- ListBoxItem.cs
- XmlToDatasetMap.cs
- XmlHelper.cs
- DesignerHost.cs
- TableItemPatternIdentifiers.cs
- ObjectDisposedException.cs
- Token.cs
- XmlSchemaValidationException.cs
- ErrorHandler.cs
- BehaviorService.cs
- OrderedDictionaryStateHelper.cs
- SHA256Cng.cs
- UnsafeNativeMethods.cs
- DesignObjectWrapper.cs
- ImageKeyConverter.cs
- SafeThreadHandle.cs
- SimpleTextLine.cs
- InlineCollection.cs
- ClipboardData.cs
- OutputCacheModule.cs
- AppDomainCompilerProxy.cs
- DataKeyCollection.cs
- FontDialog.cs
- ToolStripScrollButton.cs
- SizeAnimation.cs
- Region.cs
- RegexCode.cs
- PropertyEmitterBase.cs
- MultipartContentParser.cs
- XmlArrayItemAttribute.cs
- mediaeventshelper.cs
- CachedFontFace.cs
- DataGridItemCollection.cs
- ExpressionList.cs
- MaskInputRejectedEventArgs.cs
- PositiveTimeSpanValidatorAttribute.cs
- KerberosReceiverSecurityToken.cs
- ArithmeticException.cs
- VarInfo.cs
- SchemaCollectionCompiler.cs
- Aggregates.cs
- HtmlSelect.cs
- TableCellAutomationPeer.cs
- DateTime.cs
- XmlMembersMapping.cs
- RMEnrollmentPage1.cs
- UnsafeNativeMethods.cs
- HTMLTextWriter.cs
- JsonByteArrayDataContract.cs
- StdValidatorsAndConverters.cs
- TypedElement.cs
- GiveFeedbackEventArgs.cs
- StringResourceManager.cs
- XamlPoint3DCollectionSerializer.cs
- Light.cs
- RepeatBehaviorConverter.cs
- NamespaceEmitter.cs
- IApplicationTrustManager.cs