Code:
/ 4.0 / 4.0 / 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. //---------------------------------------------------------------------- // // 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
- xmlglyphRunInfo.cs
- XPathNavigatorReader.cs
- AutoResizedEvent.cs
- RawStylusInputCustomDataList.cs
- BitmapSizeOptions.cs
- SortExpressionBuilder.cs
- PseudoWebRequest.cs
- ColorConvertedBitmapExtension.cs
- OperandQuery.cs
- FactoryGenerator.cs
- MediaContextNotificationWindow.cs
- SimpleBitVector32.cs
- SplitterPanel.cs
- SqlNodeAnnotations.cs
- XmlSchemaSimpleTypeUnion.cs
- TypographyProperties.cs
- AnimationTimeline.cs
- SQLUtility.cs
- EventTrigger.cs
- Utils.cs
- _IPv6Address.cs
- Graphics.cs
- ParallelActivityDesigner.cs
- GridViewDeletedEventArgs.cs
- UriWriter.cs
- Rijndael.cs
- RuntimeArgumentHandle.cs
- SystemIcmpV4Statistics.cs
- SchemaLookupTable.cs
- BinaryMethodMessage.cs
- SimpleHandlerFactory.cs
- ReferencedType.cs
- ExtractorMetadata.cs
- ControlPaint.cs
- ScriptManager.cs
- RsaSecurityToken.cs
- Table.cs
- SystemNetHelpers.cs
- ContextItem.cs
- BindableAttribute.cs
- CompoundFileDeflateTransform.cs
- WebPartDisplayModeCollection.cs
- XmlDigitalSignatureProcessor.cs
- ThumbButtonInfo.cs
- FontFaceLayoutInfo.cs
- AttributeCollection.cs
- ToolStripDropDown.cs
- Padding.cs
- PersonalizationState.cs
- TemplateControlBuildProvider.cs
- EnterpriseServicesHelper.cs
- CodeExpressionCollection.cs
- GridItemProviderWrapper.cs
- SqlDataSourceEnumerator.cs
- TableRow.cs
- FileSystemEventArgs.cs
- DispatchWrapper.cs
- AssemblyGen.cs
- LinqDataSourceDisposeEventArgs.cs
- RadioButtonBaseAdapter.cs
- SoapObjectInfo.cs
- IsolatedStorageFile.cs
- MessageAction.cs
- LineServices.cs
- DrawingDrawingContext.cs
- DBSqlParser.cs
- TypedElement.cs
- PrivateFontCollection.cs
- Style.cs
- ProfileManager.cs
- SessionState.cs
- OutputCacheSettingsSection.cs
- DesignTimeTemplateParser.cs
- COM2IProvidePropertyBuilderHandler.cs
- ToolBarDesigner.cs
- WindowsSpinner.cs
- GlyphTypeface.cs
- StatusBarItemAutomationPeer.cs
- D3DImage.cs
- ClientBuildManagerCallback.cs
- ProbeRequestResponseAsyncResult.cs
- CellPartitioner.cs
- RegexNode.cs
- ListViewUpdatedEventArgs.cs
- ColorTransform.cs
- FreezableOperations.cs
- ClockGroup.cs
- Transform.cs
- FacetEnabledSchemaElement.cs
- OdbcDataReader.cs
- Point.cs
- CompilerScope.cs
- itemelement.cs
- ResourceKey.cs
- SplitterPanel.cs
- DataRow.cs
- FixedDocument.cs
- EmptyStringExpandableObjectConverter.cs
- ResXResourceSet.cs
- Argument.cs