Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / DataServiceHostWrapper.cs / 1458001 / DataServiceHostWrapper.cs
//---------------------------------------------------------------------- //// Copyright (c) Microsoft Corporation. All rights reserved. // //// Provides the wrapper class for DataService hosts. // // // @owner [....] //--------------------------------------------------------------------- namespace System.Data.Services { #region Namespaces. using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Diagnostics; #endregion Namespaces. ////// Enum to represent various http methods /// internal enum AstoriaVerbs { #region Values. ///Not Initialized. None, ///Represents the GET http method. GET, ///Represents the PUT http method. PUT, ///Represents the POST http method. POST, ///Represents the DELETE http method. DELETE, ///Represents the MERGE http method. MERGE #endregion Values. } ////// Provides access to the environment for a DataService, /// including information about the current request. /// internal class DataServiceHostWrapper { #region Private Fields ///Reference to the IDataServiceHost object we are wrapping private readonly IDataServiceHost host; ///Gets a comma-separated list of client-supported MIME Accept types. private readonly string requestAccept; ///Gets the string with the specification for the character set encoding that the client requested, possibly null. private readonly string requestAcceptCharSet; ///Gets the HTTP MIME type of the request stream. private readonly string requestContentType; ///Gets the value of the If-Match header from the request made private readonly string requestIfMatch; ///Gets the value of the If-None-Match header from the request made private readonly string requestIfNoneMatch; ///Gets the value for the MaxDataServiceVersion request header. private readonly string requestMaxVersion; ///Gets the value for the DataServiceVersion request header. private readonly string requestVersion; ////// Get the enum representing the http method name. /// We have this for perf reason since enum comparison is faster than string comparison. /// private AstoriaVerbs astoriaHttpVerb; ///Gets the HTTP data transfer method (such as GET, POST, or HEAD) used by the client. private string requestHttpMethod; ///Gets the absolute URI to the resource upon which to apply the request. private Uri absoluteRequestUri; ///Gets the absolute URI to the service. private Uri absoluteServiceUri; ///Gets the private Stream requestStream; ///from which the input must be read to the client. Gets the private Stream responseStream; ///to be written to send a response to the client. Request headers private WebHeaderCollection requestHeaders; ///Response headers private WebHeaderCollection responseHeaders; #endregion Private Fields #region Constructor ////// Constructs an instance of the DataServiceHostWrapper object. /// /// IDataServiceHost instance to wrap. internal DataServiceHostWrapper(IDataServiceHost host) { Debug.Assert(host != null, "host != null"); this.host = host; this.astoriaHttpVerb = AstoriaVerbs.None; this.requestAccept = host.RequestAccept; this.requestAcceptCharSet = host.RequestAcceptCharSet; this.requestContentType = host.RequestContentType; this.requestIfMatch = host.RequestIfMatch; this.requestIfNoneMatch = host.RequestIfNoneMatch; this.requestMaxVersion = host.RequestMaxVersion; this.requestVersion = host.RequestVersion; } #endregion Constructor #region Properties. ////// Get the enum representing the http method name. /// /// http method used for the request. ///enum representing the http method name. internal AstoriaVerbs AstoriaHttpVerb { get { if (this.astoriaHttpVerb == AstoriaVerbs.None) { string requestMethod = this.RequestHttpMethod; Debug.Assert(!string.IsNullOrEmpty(requestMethod), "!string.IsNullOrEmpty(requestMethod)"); switch (requestMethod) { case XmlConstants.HttpMethodGet: this.astoriaHttpVerb = AstoriaVerbs.GET; break; case XmlConstants.HttpMethodPost: this.astoriaHttpVerb = AstoriaVerbs.POST; break; case XmlConstants.HttpMethodPut: this.astoriaHttpVerb = AstoriaVerbs.PUT; break; case XmlConstants.HttpMethodMerge: this.astoriaHttpVerb = AstoriaVerbs.MERGE; break; case XmlConstants.HttpMethodDelete: this.astoriaHttpVerb = AstoriaVerbs.DELETE; break; default: // 501: Not Implemented (rather than 405 - Method Not Allowed, // which implies it was understood and rejected). throw DataServiceException.CreateMethodNotImplemented(Strings.DataService_NotImplementedException); } } return this.astoriaHttpVerb; } } ///Gets the absolute resource upon which to apply the request. internal Uri AbsoluteRequestUri { get { if (this.absoluteRequestUri == null) { this.absoluteRequestUri = this.host.AbsoluteRequestUri; if (this.absoluteRequestUri == null) { throw new InvalidOperationException(Strings.RequestUriProcessor_AbsoluteRequestUriCannotBeNull); } else if (!this.absoluteRequestUri.IsAbsoluteUri) { throw new InvalidOperationException(Strings.RequestUriProcessor_AbsoluteRequestUriMustBeAbsolute); } } return this.absoluteRequestUri; } } ///Gets the absolute URI to the service. internal Uri AbsoluteServiceUri { get { if (this.absoluteServiceUri == null) { this.absoluteServiceUri = this.host.AbsoluteServiceUri; if (this.absoluteServiceUri == null) { throw new InvalidOperationException(Strings.RequestUriProcessor_AbsoluteServiceUriCannotBeNull); } else if (!this.absoluteServiceUri.IsAbsoluteUri) { throw new InvalidOperationException(Strings.RequestUriProcessor_AbsoluteServiceUriMustBeAbsolute); } } return this.absoluteServiceUri; } } ///Gets a comma-separated list of client-supported MIME Accept types. internal string RequestAccept { get { return this.requestAccept; } } ///Gets the string with the specification for the character set encoding that the client requested, possibly null. internal string RequestAcceptCharSet { get { return this.requestAcceptCharSet; } } ///Gets the HTTP MIME type of the request stream. internal string RequestContentType { get { return this.requestContentType; } } ///Gets the HTTP data transfer method (such as GET, POST, or HEAD) used by the client. internal string RequestHttpMethod { get { if (string.IsNullOrEmpty(this.requestHttpMethod)) { this.requestHttpMethod = this.host.RequestHttpMethod; if (String.IsNullOrEmpty(this.requestHttpMethod)) { throw new InvalidOperationException(Strings.DataServiceHost_EmptyHttpMethod); } } return this.requestHttpMethod; } } ///Gets the value of the If-Match header from the request made internal string RequestIfMatch { get { return this.requestIfMatch; } } ///Gets the value of the If-None-Match header from the request made internal string RequestIfNoneMatch { get { return this.requestIfNoneMatch; } } ///Gets the value for the MaxDataServiceVersion request header. internal string RequestMaxVersion { get { return this.requestMaxVersion; } } ///Gets the internal Stream RequestStream { get { if (this.requestStream == null) { this.requestStream = this.host.RequestStream; if (this.requestStream == null) { throw DataServiceException.CreateBadRequestError(Strings.BadRequest_NullRequestStream); } } return this.requestStream; } } ///from which the input must be read to the client. Gets the value for the DataServiceVersion request header. internal string RequestVersion { get { return this.requestVersion; } } ///Request headers internal WebHeaderCollection RequestHeaders { get { if (this.requestHeaders == null) { IDataServiceHost2 host2 = DataServiceHostWrapper.ValidateAndCast(this.host); this.requestHeaders = host2.RequestHeaders; if (this.requestHeaders == null) { throw new InvalidOperationException(Strings.DataServiceHost_RequestHeadersCannotBeNull); } } return this.requestHeaders; } } /// Response headers internal WebHeaderCollection ResponseHeaders { get { if (this.responseHeaders == null) { IDataServiceHost2 host2 = DataServiceHostWrapper.ValidateAndCast(this.host); this.responseHeaders = host2.ResponseHeaders; if (this.responseHeaders == null) { throw new InvalidOperationException(Strings.DataServiceHost_ResponseHeadersCannotBeNull); } } return this.responseHeaders; } } /// Gets or sets the Cache-Control header on the response. internal string ResponseCacheControl { // No up stream caller // get { return this.host.ResponseCacheControl; } set { this.host.ResponseCacheControl = value; } } ///Gets or sets the HTTP MIME type of the output stream. internal string ResponseContentType { get { return this.host.ResponseContentType; } set { this.host.ResponseContentType = value; } } ///Gets/Sets the value of the ETag header on the response internal string ResponseETag { get { return this.host.ResponseETag; } set { this.host.ResponseETag = value; } } ///Gets or sets the Location header on the response. internal string ResponseLocation { // No up stream caller // get { return this.host.ResponseLocation; } set { this.host.ResponseLocation = value; } } ////// Returns the status code for the request made /// internal int ResponseStatusCode { get { return this.host.ResponseStatusCode; } set { this.host.ResponseStatusCode = value; } } ///Gets the internal Stream ResponseStream { get { if (this.responseStream == null) { this.responseStream = this.host.ResponseStream; if (this.responseStream == null) { throw DataServiceException.CreateBadRequestError(Strings.BadRequest_NullResponseStream); } } return this.responseStream; } } ///to be written to send a response to the client. Gets or sets the value for the DataServiceVersion response header. internal string ResponseVersion { set { this.host.ResponseVersion = value; } } ///If the wrapped host is a HttpContextServiceHost, returns the host internal HttpContextServiceHost HttpContextServiceHost { get { return this.host as HttpContextServiceHost; } } ///If the wrapped host is a BatchServiceHost, returns the batch host internal BatchServiceHost BatchServiceHost { get { Debug.Assert(this.host is BatchServiceHost, "We shouldn't be calling this outside of the batching code path."); return this.host as BatchServiceHost; } } #endregion Properties. #region Methods. ///Gets the value for the specified item in the request query string. /// Item to return. ////// The value for the specified item in the request query string; /// null if internal string GetQueryStringItem(string item) { return this.host.GetQueryStringItem(item); } ///is not found. /// Method to handle a data service exception during processing. /// Exception handling description. internal void ProcessException(HandleExceptionArgs args) { this.host.ProcessException(args); } ///Verifies that query parameters are valid. internal void VerifyQueryParameters() { if (this.host is HttpContextServiceHost) { ((HttpContextServiceHost)this.host).VerifyQueryParameters(); } } ///Checks whether the given object instance is of type T. /// object instance. ///type which we need to cast the given instance to. ///Returns strongly typed instance of T, if the given object is an instance of type T. ///If the given object is not of Type T. private static T ValidateAndCast(object instance) where T : class { T instanceAsT = instance as T; if (instanceAsT == null) { throw new InvalidOperationException(Strings.DataServiceException_GeneralError); } return instanceAsT; } #endregion Methods. } } // 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
- TextTreeRootNode.cs
- BamlLocalizableResourceKey.cs
- EventHandlersStore.cs
- input.cs
- ListViewGroupConverter.cs
- VariableExpressionConverter.cs
- CuspData.cs
- BamlLocalizabilityResolver.cs
- ProvidePropertyAttribute.cs
- StreamWithDictionary.cs
- FileDialogCustomPlacesCollection.cs
- OutputCacheSettingsSection.cs
- ColorConvertedBitmap.cs
- XmlSerializableReader.cs
- KerberosSecurityTokenAuthenticator.cs
- DataGridCommandEventArgs.cs
- StringPropertyBuilder.cs
- PageOrientation.cs
- DataGridViewColumnDesignTimeVisibleAttribute.cs
- NestedContainer.cs
- DateTimeEditor.cs
- KeyTimeConverter.cs
- QueryParameter.cs
- EntityCollection.cs
- MinimizableAttributeTypeConverter.cs
- webeventbuffer.cs
- Trace.cs
- RuleInfoComparer.cs
- TypeResolver.cs
- LowerCaseStringConverter.cs
- UnorderedHashRepartitionStream.cs
- XmlAnyElementAttributes.cs
- BitmapCache.cs
- WindowsListViewItemStartMenu.cs
- FixedSOMPage.cs
- NameValueCollection.cs
- PersonalizationStateInfo.cs
- ChameleonKey.cs
- DesignUtil.cs
- BrushValueSerializer.cs
- DependencyPropertyChangedEventArgs.cs
- OverflowException.cs
- AncestorChangedEventArgs.cs
- FramingDecoders.cs
- CaretElement.cs
- CheckBoxStandardAdapter.cs
- LinkLabelLinkClickedEvent.cs
- FilterableAttribute.cs
- XmlEncodedRawTextWriter.cs
- ChannelManagerBase.cs
- SiteMapNodeCollection.cs
- TreeNodeConverter.cs
- Pen.cs
- XamlPointCollectionSerializer.cs
- BrowsableAttribute.cs
- Exception.cs
- ItemsPresenter.cs
- DrawingVisual.cs
- TransformerConfigurationWizardBase.cs
- HMACSHA256.cs
- LinqToSqlWrapper.cs
- Literal.cs
- PromptStyle.cs
- BuildManagerHost.cs
- UnionQueryOperator.cs
- HierarchicalDataTemplate.cs
- BitmapEffectInput.cs
- X509CertificateCollection.cs
- XamlParser.cs
- AutoGeneratedFieldProperties.cs
- ReadOnlyDataSourceView.cs
- SqlCaseSimplifier.cs
- SmtpLoginAuthenticationModule.cs
- _HeaderInfo.cs
- _StreamFramer.cs
- EnterpriseServicesHelper.cs
- Solver.cs
- DataListCommandEventArgs.cs
- QilNode.cs
- PassportAuthentication.cs
- ServiceContractListItemList.cs
- CustomTrackingQuery.cs
- ContentPropertyAttribute.cs
- EventlogProvider.cs
- StringArrayConverter.cs
- ItemCollection.cs
- Brushes.cs
- ProxyWebPartConnectionCollection.cs
- TypeBuilder.cs
- PriorityItem.cs
- SystemFonts.cs
- PageCatalogPart.cs
- XmlChoiceIdentifierAttribute.cs
- Boolean.cs
- MarshalByRefObject.cs
- BuilderElements.cs
- cryptoapiTransform.cs
- FindRequestContext.cs
- WebPartCloseVerb.cs
- TreeNode.cs