Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.ServiceModel.Web / System / ServiceModel / Description / WebScriptClientGenerator.cs / 1305376 / WebScriptClientGenerator.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Description { using System; using System.Globalization; using System.Net; using System.Runtime.Serialization.Json; using System.ServiceModel.Activation; using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; using System.Web; using System.Web.Script.Services; class WebScriptClientGenerator : ServiceMetadataExtension.IHttpGetMetadata { internal const string DebugMetadataEndpointSuffix = "jsdebug"; internal const string MetadataEndpointSuffix = "js"; bool debugMode; ServiceEndpoint endpoint; NameValueCacheproxyCache; DateTime serviceLastModified; string serviceLastModifiedRfc1123String; bool crossDomainScriptAccessEnabled; public WebScriptClientGenerator(ServiceEndpoint endpoint, bool debugMode, bool crossDomainScriptAccessEnabled) { this.endpoint = endpoint; this.debugMode = debugMode; // The service host is automatically restarted every time a service or any of its dependencies change // A restart adds all the behaviors from scratch. // => WebScriptEnablingBehavior plugs in this contract for the "/js" endpoint afresh if the service changes. this.serviceLastModified = DateTime.UtcNow; // Zero out all millisecond and sub-millisecond information because RFC1123 doesn't support milliseconds. // => The parsed If-Modified-Since date, against which serviceLastModified will need to be compared, // won't have milliseconds. this.serviceLastModified = new DateTime(this.serviceLastModified.Year, this.serviceLastModified.Month, this.serviceLastModified.Day, this.serviceLastModified.Hour, this.serviceLastModified.Minute, this.serviceLastModified.Second, DateTimeKind.Utc); this.proxyCache = new NameValueCache (); this.crossDomainScriptAccessEnabled = crossDomainScriptAccessEnabled; } string GetProxyContent(Uri baseUri) { string proxy = this.proxyCache.Lookup(baseUri.Authority); if (String.IsNullOrEmpty(proxy)) { proxy = ProxyGenerator.GetClientProxyScript(this.endpoint.Contract.ContractType, baseUri.AbsoluteUri, this.debugMode, endpoint); this.proxyCache.AddOrUpdate(baseUri.Authority, proxy); } return proxy; } string ServiceLastModifiedRfc1123String { get { if (serviceLastModifiedRfc1123String == null) { // "R" for RFC1123. The HTTP standard requires that dates be serialized according to RFC1123. serviceLastModifiedRfc1123String = serviceLastModified.ToString("R", DateTimeFormatInfo.InvariantInfo); } return serviceLastModifiedRfc1123String; } } public Message Get(Message message) { HttpRequestMessageProperty requestMessageProperty = (HttpRequestMessageProperty) message.Properties[HttpRequestMessageProperty.Name]; HttpResponseMessageProperty responseMessageProperty = new HttpResponseMessageProperty(); if ((requestMessageProperty != null) && IsServiceUnchanged(requestMessageProperty.Headers[JsonGlobals.IfModifiedSinceString])) { Message responseMessage = Message.CreateMessage(MessageVersion.None, string.Empty); responseMessageProperty.StatusCode = HttpStatusCode.NotModified; responseMessage.Properties.Add(HttpResponseMessageProperty.Name, responseMessageProperty); return responseMessage; } string proxyContent = this.GetProxyContent(UriTemplate.RewriteUri(this.endpoint.Address.Uri, requestMessageProperty.Headers[HttpRequestHeader.Host])); Message response = new WebScriptMetadataMessage(string.Empty, proxyContent); responseMessageProperty.Headers.Add(JsonGlobals.LastModifiedString, ServiceLastModifiedRfc1123String); responseMessageProperty.Headers.Add(JsonGlobals.ExpiresString, ServiceLastModifiedRfc1123String); if (AspNetEnvironment.Current.AspNetCompatibilityEnabled) { HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.Public); } else { responseMessageProperty.Headers.Add(JsonGlobals.CacheControlString, JsonGlobals.publicString); } response.Properties.Add(HttpResponseMessageProperty.Name, responseMessageProperty); return response; } internal static string GetMetadataEndpointSuffix(bool debugMode) { if (debugMode) { return DebugMetadataEndpointSuffix; } else { return MetadataEndpointSuffix; } } bool IsServiceUnchanged(string ifModifiedSinceHeaderValue) { if (string.IsNullOrEmpty(ifModifiedSinceHeaderValue)) { return false; } DateTime ifModifiedSinceDateTime; if (DateTime.TryParse(ifModifiedSinceHeaderValue, DateTimeFormatInfo.InvariantInfo, DateTimeStyles.AdjustToUniversal, out ifModifiedSinceDateTime)) { return (ifModifiedSinceDateTime >= serviceLastModified); } return false; } } } // 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
- CodeSnippetCompileUnit.cs
- DESCryptoServiceProvider.cs
- DataSourceHelper.cs
- EventBuilder.cs
- ProfileSection.cs
- AccessedThroughPropertyAttribute.cs
- BindingListCollectionView.cs
- XmlSignificantWhitespace.cs
- DataSourceExpression.cs
- ADRoleFactory.cs
- ComAdminWrapper.cs
- OperandQuery.cs
- HttpPostServerProtocol.cs
- PersianCalendar.cs
- ClockGroup.cs
- Compilation.cs
- XmlMtomReader.cs
- ConnectionPointCookie.cs
- ProtocolsConfigurationHandler.cs
- CompoundFileStorageReference.cs
- GenericWebPart.cs
- PersonalizationState.cs
- DataColumnChangeEvent.cs
- WSSecureConversationDec2005.cs
- DataGridHeaderBorder.cs
- EventToken.cs
- ForceCopyBuildProvider.cs
- SerializationAttributes.cs
- XmlLinkedNode.cs
- MetadataUtilsSmi.cs
- SamlSerializer.cs
- CFGGrammar.cs
- CodeArgumentReferenceExpression.cs
- InfoCardSymmetricAlgorithm.cs
- RTLAwareMessageBox.cs
- BadImageFormatException.cs
- FileDataSourceCache.cs
- MapPathBasedVirtualPathProvider.cs
- BaseTransportHeaders.cs
- DataFieldCollectionEditor.cs
- NativeMethods.cs
- Translator.cs
- ContentElement.cs
- TraceListeners.cs
- RegularExpressionValidator.cs
- AccessViolationException.cs
- WebHeaderCollection.cs
- InfoCardTrace.cs
- Iis7Helper.cs
- TextTreeTextNode.cs
- ProxyAttribute.cs
- CodeIdentifiers.cs
- SqlComparer.cs
- TemplateKeyConverter.cs
- ToolStripItemRenderEventArgs.cs
- TileModeValidation.cs
- AuthorizationSection.cs
- FtpWebResponse.cs
- InkCanvasInnerCanvas.cs
- WsiProfilesElement.cs
- InstallerTypeAttribute.cs
- CodeBinaryOperatorExpression.cs
- TableRowGroup.cs
- ComboBox.cs
- DataGridCell.cs
- StatusBarDrawItemEvent.cs
- LogEntrySerialization.cs
- _NetRes.cs
- AppLevelCompilationSectionCache.cs
- Win32.cs
- ConfigurationErrorsException.cs
- BaseCAMarshaler.cs
- FormViewActionList.cs
- BitmapFrameEncode.cs
- AccessDataSource.cs
- InputProcessorProfilesLoader.cs
- PropertyChangedEventArgs.cs
- InfoCardAsymmetricCrypto.cs
- RedistVersionInfo.cs
- ProtocolsConfigurationEntry.cs
- TemplateAction.cs
- ThreadPool.cs
- SecurityCriticalDataForSet.cs
- DesignerSerializationVisibilityAttribute.cs
- Connection.cs
- HMACSHA1.cs
- BaseCodeDomTreeGenerator.cs
- WebPartConnection.cs
- QueryCacheKey.cs
- SamlAuthenticationClaimResource.cs
- XPathNodeIterator.cs
- DataGridDetailsPresenter.cs
- TemplateComponentConnector.cs
- SystemFonts.cs
- PropertyCollection.cs
- InvalidCastException.cs
- ParallelTimeline.cs
- FixedSOMSemanticBox.cs
- PermissionAttributes.cs
- TrackBar.cs