Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Web / System / Web / Services / Discovery / ContractReference.cs / 1305376 / ContractReference.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Discovery { using System; using System.Net; using System.Xml.Serialization; using System.Web.Services.Description; using System.IO; using System.Xml; using System.Xml.Schema; using System.Web.Services.Protocols; using System.Text; using System.Collections; using System.Threading; using System.Diagnostics; using System.Web.Services.Diagnostics; ////// /// [XmlRoot("contractRef", Namespace=ContractReference.Namespace)] public class ContractReference : DiscoveryReference { ///[To be supplied.] ////// /// public const string Namespace = "http://schemas.xmlsoap.org/disco/scl/"; private string docRef; private string reference; ///[To be supplied.] ////// /// public ContractReference() { } ///[To be supplied.] ////// /// public ContractReference(string href) { Ref = href; } ///[To be supplied.] ////// /// public ContractReference(string href, string docRef) { Ref = href; DocRef = docRef; } ///[To be supplied.] ////// /// [XmlAttribute("ref")] public string Ref { get { return reference; } set { reference = value; } } ///[To be supplied.] ////// /// [XmlAttribute("docRef")] public string DocRef { get { return docRef; } set { docRef = value; } } ///[To be supplied.] ////// /// [XmlIgnore] public override string Url { get { return Ref; } set { Ref = value; } } internal override void LoadExternals(Hashtable loadedExternals) { ServiceDescription contract = null; try { contract = Contract; } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } // don't let the exception out - keep going. Just add it to the list of errors. ClientProtocol.Errors[Url] = e; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "LoadExternals", e); } if (contract != null) { foreach (XmlSchema schema in Contract.Types.Schemas) { SchemaReference.LoadExternals(schema, Url, ClientProtocol, loadedExternals); } } } ///[To be supplied.] ////// /// [XmlIgnore] public ServiceDescription Contract { get { if (ClientProtocol == null) throw new InvalidOperationException(Res.GetString(Res.WebMissingClientProtocol)); object document = ClientProtocol.Documents[Url]; if (document == null) { Resolve(); document = ClientProtocol.Documents[Url]; } ServiceDescription contract = document as ServiceDescription; if (contract == null) { throw new InvalidOperationException(Res.GetString(Res.WebInvalidDocType, typeof(ServiceDescription).FullName, document == null ? string.Empty: document.GetType().FullName, Url)); } return contract; } } ///[To be supplied.] ////// /// [XmlIgnore] public override string DefaultFilename { get { string fileName = MakeValidFilename(Contract.Name); if (fileName == null || fileName.Length == 0) fileName = FilenameFromUrl(Url); return Path.ChangeExtension(fileName, ".wsdl"); } } ///[To be supplied.] ////// /// public override void WriteDocument(object document, Stream stream) { ((ServiceDescription) document).Write(new StreamWriter(stream, new UTF8Encoding(false))); } ///[To be supplied.] ////// /// public override object ReadDocument(Stream stream) { return ServiceDescription.Read(stream, true); } ///[To be supplied.] ////// /// protected internal override void Resolve(string contentType, Stream stream) { if (ContentType.IsHtml(contentType)) throw new InvalidContentTypeException(Res.GetString(Res.WebInvalidContentType, contentType), contentType); ServiceDescription serviceDescription = ClientProtocol.Documents[Url] as ServiceDescription; if( serviceDescription == null ) { serviceDescription = ServiceDescription.Read(stream, true); serviceDescription.RetrievalUrl = Url; ClientProtocol.Documents[Url] = serviceDescription; } ClientProtocol.References[Url] = this; ArrayList importUrls = new ArrayList(); foreach (Import import in serviceDescription.Imports) if (import.Location != null) importUrls.Add(import.Location); foreach (XmlSchema schema in serviceDescription.Types.Schemas) { foreach (XmlSchemaExternal external in schema.Includes) { if (external.SchemaLocation != null && external.SchemaLocation.Length > 0) { importUrls.Add(external.SchemaLocation); } } } foreach (string urlFromImport in importUrls) { // make the (possibly) relative Uri in the contract fully qualified with respect to the contract URL string importUrl = UriToString(Url, urlFromImport); if( ClientProtocol.Documents[importUrl] != null ) { continue; } string oldUrl = importUrl; try { stream = ClientProtocol.Download(ref importUrl, ref contentType); try { //Proceed only if not been here before if( ClientProtocol.Documents[importUrl] == null ) { XmlTextReader reader = new XmlTextReader(new StreamReader(stream, RequestResponseUtils.GetEncoding(contentType))); reader.WhitespaceHandling = WhitespaceHandling.Significant; reader.XmlResolver = null; reader.DtdProcessing = DtdProcessing.Prohibit; //Resolve on WSDL and XSD will go recursivelly if (ServiceDescription.CanRead(reader)) { ServiceDescription doc = ServiceDescription.Read(reader, true); doc.RetrievalUrl = importUrl; ClientProtocol.Documents[importUrl] = doc; ContractReference contractReference = new ContractReference(importUrl, null); contractReference.ClientProtocol = ClientProtocol; try { contractReference.Resolve(contentType, stream); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } contractReference.Url = oldUrl; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "Resolve", e); } } else if (reader.IsStartElement("schema", XmlSchema.Namespace)) { ClientProtocol.Documents[importUrl] = XmlSchema.Read(reader, null); SchemaReference schemaReference = new SchemaReference(importUrl); schemaReference.ClientProtocol = ClientProtocol; try { schemaReference.Resolve(contentType, stream); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } schemaReference.Url = oldUrl; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "Resolve", e); } } // If it's not XML, or we don't know what kind of XML it is, skip the file. The user // will have to download the dependent file(s) manually, but at least we will continue // to discover files instead of throwing an exception. } } finally { stream.Close(); } } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new InvalidDocumentContentsException(Res.GetString(Res.TheWSDLDocumentContainsLinksThatCouldNotBeResolved, importUrl), e); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Discovery { using System; using System.Net; using System.Xml.Serialization; using System.Web.Services.Description; using System.IO; using System.Xml; using System.Xml.Schema; using System.Web.Services.Protocols; using System.Text; using System.Collections; using System.Threading; using System.Diagnostics; using System.Web.Services.Diagnostics; ////// /// [XmlRoot("contractRef", Namespace=ContractReference.Namespace)] public class ContractReference : DiscoveryReference { ///[To be supplied.] ////// /// public const string Namespace = "http://schemas.xmlsoap.org/disco/scl/"; private string docRef; private string reference; ///[To be supplied.] ////// /// public ContractReference() { } ///[To be supplied.] ////// /// public ContractReference(string href) { Ref = href; } ///[To be supplied.] ////// /// public ContractReference(string href, string docRef) { Ref = href; DocRef = docRef; } ///[To be supplied.] ////// /// [XmlAttribute("ref")] public string Ref { get { return reference; } set { reference = value; } } ///[To be supplied.] ////// /// [XmlAttribute("docRef")] public string DocRef { get { return docRef; } set { docRef = value; } } ///[To be supplied.] ////// /// [XmlIgnore] public override string Url { get { return Ref; } set { Ref = value; } } internal override void LoadExternals(Hashtable loadedExternals) { ServiceDescription contract = null; try { contract = Contract; } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } // don't let the exception out - keep going. Just add it to the list of errors. ClientProtocol.Errors[Url] = e; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "LoadExternals", e); } if (contract != null) { foreach (XmlSchema schema in Contract.Types.Schemas) { SchemaReference.LoadExternals(schema, Url, ClientProtocol, loadedExternals); } } } ///[To be supplied.] ////// /// [XmlIgnore] public ServiceDescription Contract { get { if (ClientProtocol == null) throw new InvalidOperationException(Res.GetString(Res.WebMissingClientProtocol)); object document = ClientProtocol.Documents[Url]; if (document == null) { Resolve(); document = ClientProtocol.Documents[Url]; } ServiceDescription contract = document as ServiceDescription; if (contract == null) { throw new InvalidOperationException(Res.GetString(Res.WebInvalidDocType, typeof(ServiceDescription).FullName, document == null ? string.Empty: document.GetType().FullName, Url)); } return contract; } } ///[To be supplied.] ////// /// [XmlIgnore] public override string DefaultFilename { get { string fileName = MakeValidFilename(Contract.Name); if (fileName == null || fileName.Length == 0) fileName = FilenameFromUrl(Url); return Path.ChangeExtension(fileName, ".wsdl"); } } ///[To be supplied.] ////// /// public override void WriteDocument(object document, Stream stream) { ((ServiceDescription) document).Write(new StreamWriter(stream, new UTF8Encoding(false))); } ///[To be supplied.] ////// /// public override object ReadDocument(Stream stream) { return ServiceDescription.Read(stream, true); } ///[To be supplied.] ////// /// protected internal override void Resolve(string contentType, Stream stream) { if (ContentType.IsHtml(contentType)) throw new InvalidContentTypeException(Res.GetString(Res.WebInvalidContentType, contentType), contentType); ServiceDescription serviceDescription = ClientProtocol.Documents[Url] as ServiceDescription; if( serviceDescription == null ) { serviceDescription = ServiceDescription.Read(stream, true); serviceDescription.RetrievalUrl = Url; ClientProtocol.Documents[Url] = serviceDescription; } ClientProtocol.References[Url] = this; ArrayList importUrls = new ArrayList(); foreach (Import import in serviceDescription.Imports) if (import.Location != null) importUrls.Add(import.Location); foreach (XmlSchema schema in serviceDescription.Types.Schemas) { foreach (XmlSchemaExternal external in schema.Includes) { if (external.SchemaLocation != null && external.SchemaLocation.Length > 0) { importUrls.Add(external.SchemaLocation); } } } foreach (string urlFromImport in importUrls) { // make the (possibly) relative Uri in the contract fully qualified with respect to the contract URL string importUrl = UriToString(Url, urlFromImport); if( ClientProtocol.Documents[importUrl] != null ) { continue; } string oldUrl = importUrl; try { stream = ClientProtocol.Download(ref importUrl, ref contentType); try { //Proceed only if not been here before if( ClientProtocol.Documents[importUrl] == null ) { XmlTextReader reader = new XmlTextReader(new StreamReader(stream, RequestResponseUtils.GetEncoding(contentType))); reader.WhitespaceHandling = WhitespaceHandling.Significant; reader.XmlResolver = null; reader.DtdProcessing = DtdProcessing.Prohibit; //Resolve on WSDL and XSD will go recursivelly if (ServiceDescription.CanRead(reader)) { ServiceDescription doc = ServiceDescription.Read(reader, true); doc.RetrievalUrl = importUrl; ClientProtocol.Documents[importUrl] = doc; ContractReference contractReference = new ContractReference(importUrl, null); contractReference.ClientProtocol = ClientProtocol; try { contractReference.Resolve(contentType, stream); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } contractReference.Url = oldUrl; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "Resolve", e); } } else if (reader.IsStartElement("schema", XmlSchema.Namespace)) { ClientProtocol.Documents[importUrl] = XmlSchema.Read(reader, null); SchemaReference schemaReference = new SchemaReference(importUrl); schemaReference.ClientProtocol = ClientProtocol; try { schemaReference.Resolve(contentType, stream); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } schemaReference.Url = oldUrl; if (Tracing.On) Tracing.ExceptionCatch(TraceEventType.Warning, this, "Resolve", e); } } // If it's not XML, or we don't know what kind of XML it is, skip the file. The user // will have to download the dependent file(s) manually, but at least we will continue // to discover files instead of throwing an exception. } } finally { stream.Close(); } } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new InvalidDocumentContentsException(Res.GetString(Res.TheWSDLDocumentContainsLinksThatCouldNotBeResolved, importUrl), e); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlDataSource.cs
- PrivilegeNotHeldException.cs
- HttpWebRequestElement.cs
- PeerCollaboration.cs
- SoundPlayer.cs
- PermissionListSet.cs
- HostProtectionException.cs
- ImpersonationOption.cs
- MenuStrip.cs
- CodeEntryPointMethod.cs
- VSWCFServiceContractGenerator.cs
- ControlAdapter.cs
- Section.cs
- StyleSelector.cs
- StylusEventArgs.cs
- WebPartDeleteVerb.cs
- RelationshipWrapper.cs
- EntityDataSourceConfigureObjectContextPanel.cs
- SessionState.cs
- ManagedFilter.cs
- PathNode.cs
- HtmlShimManager.cs
- CodeAssignStatement.cs
- DropShadowBitmapEffect.cs
- BamlResourceDeserializer.cs
- SettingsPropertyValueCollection.cs
- XmlSchemaDocumentation.cs
- BitStream.cs
- Calendar.cs
- DataBindingExpressionBuilder.cs
- MailWebEventProvider.cs
- EditorPart.cs
- CodeTypeParameterCollection.cs
- MouseWheelEventArgs.cs
- BaseTemplateBuildProvider.cs
- DataPagerField.cs
- FixedTextPointer.cs
- XmlBoundElement.cs
- BaseTemplateBuildProvider.cs
- TextEditorThreadLocalStore.cs
- LinqDataSourceStatusEventArgs.cs
- NamedElement.cs
- ProcessThreadCollection.cs
- MulticastNotSupportedException.cs
- CancellationToken.cs
- FillBehavior.cs
- ProfessionalColorTable.cs
- control.ime.cs
- TcpProcessProtocolHandler.cs
- TripleDESCryptoServiceProvider.cs
- ElementUtil.cs
- WebPartDisplayModeEventArgs.cs
- CompositeKey.cs
- RelationalExpressions.cs
- XmlIlTypeHelper.cs
- ProbeDuplexAsyncResult.cs
- Model3D.cs
- FastEncoder.cs
- GetWinFXPath.cs
- ProviderCollection.cs
- ActiveDocumentEvent.cs
- XamlSerializationHelper.cs
- ImageIndexEditor.cs
- CodeBlockBuilder.cs
- MetadataFile.cs
- ChannelServices.cs
- GridViewUpdateEventArgs.cs
- HMAC.cs
- EventDrivenDesigner.cs
- SQLDateTime.cs
- HMACRIPEMD160.cs
- EnumerableRowCollection.cs
- SqlInternalConnectionTds.cs
- GACIdentityPermission.cs
- DeobfuscatingStream.cs
- filewebresponse.cs
- RowUpdatingEventArgs.cs
- IApplicationTrustManager.cs
- HtmlFormAdapter.cs
- DataTableNewRowEvent.cs
- SqlIdentifier.cs
- XmlExceptionHelper.cs
- SortDescriptionCollection.cs
- RegexCompiler.cs
- AvTraceDetails.cs
- SiteMapDataSourceView.cs
- InvalidDocumentContentsException.cs
- User.cs
- StateElementCollection.cs
- SmtpReplyReaderFactory.cs
- TransactionValidationBehavior.cs
- NamedPermissionSet.cs
- EntityDataSourceState.cs
- AddInController.cs
- SubpageParaClient.cs
- TextEmbeddedObject.cs
- DateTimeConverter.cs
- DbXmlEnabledProviderManifest.cs
- ApplicationHost.cs
- DesignerProperties.cs