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;
///
///
/// [To be supplied.]
///
[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.
//------------------------------------------------------------------------------
//
// 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;
///
///
/// [To be supplied.]
///
[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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebBrowserProgressChangedEventHandler.cs
- ResourceCategoryAttribute.cs
- Triangle.cs
- streamingZipPartStream.cs
- DynamicPropertyReader.cs
- EntityDataSourceMemberPath.cs
- ComEventsHelper.cs
- printdlgexmarshaler.cs
- XmlLanguage.cs
- TextRangeProviderWrapper.cs
- UnsafeNativeMethods.cs
- BufferedWebEventProvider.cs
- Ray3DHitTestResult.cs
- UnsafeNativeMethods.cs
- SequenceDesigner.cs
- Substitution.cs
- LinearGradientBrush.cs
- NetworkCredential.cs
- LinqDataView.cs
- TraceInternal.cs
- MdiWindowListStrip.cs
- PageBuildProvider.cs
- Label.cs
- XmlNodeList.cs
- ChannelSinkStacks.cs
- DoubleCollectionValueSerializer.cs
- ResourceManager.cs
- ColorTransformHelper.cs
- LayoutEditorPart.cs
- BaseTemplateCodeDomTreeGenerator.cs
- XmlQueryOutput.cs
- storepermissionattribute.cs
- ConnectionManagementSection.cs
- TemplateContent.cs
- SerializationEventsCache.cs
- AggregateException.cs
- InternalResources.cs
- Image.cs
- BitmapEffectGroup.cs
- WebPartConnectionsDisconnectVerb.cs
- _SslSessionsCache.cs
- UserPreferenceChangedEventArgs.cs
- SqlDelegatedTransaction.cs
- ChannelServices.cs
- SecondaryViewProvider.cs
- _RequestLifetimeSetter.cs
- SRGSCompiler.cs
- ShaperBuffers.cs
- StateMachineSubscriptionManager.cs
- RichListBox.cs
- StringExpressionSet.cs
- HtmlValidatorAdapter.cs
- RegistrationProxy.cs
- Clipboard.cs
- X500Name.cs
- InputScopeNameConverter.cs
- ListViewItem.cs
- SiteMap.cs
- DataGridViewAccessibleObject.cs
- ChannelAcceptor.cs
- AutoCompleteStringCollection.cs
- KeyInstance.cs
- XmlReader.cs
- SelectorItemAutomationPeer.cs
- BrowserDefinitionCollection.cs
- DataGridViewCellEventArgs.cs
- GPRECTF.cs
- CommentEmitter.cs
- XmlSchemaSimpleContentExtension.cs
- MembershipPasswordException.cs
- TextBox.cs
- CollectionCodeDomSerializer.cs
- RemotingServices.cs
- InstanceDataCollection.cs
- SecurityUtils.cs
- CustomPeerResolverService.cs
- ViewDesigner.cs
- FilterException.cs
- DistinctQueryOperator.cs
- BamlLocalizerErrorNotifyEventArgs.cs
- ObjectParameter.cs
- DateTimeConverter2.cs
- ImageIndexConverter.cs
- RectangleConverter.cs
- NativeMethods.cs
- ProcessInfo.cs
- WhereQueryOperator.cs
- AssemblyResourceLoader.cs
- GlyphRunDrawing.cs
- DNS.cs
- ThaiBuddhistCalendar.cs
- CodeBlockBuilder.cs
- DataListItemEventArgs.cs
- DependencyPropertyDescriptor.cs
- CheckBoxList.cs
- SqlInternalConnection.cs
- EditorResources.cs
- CompilerCollection.cs
- SimpleMailWebEventProvider.cs
- FloatSumAggregationOperator.cs