-// \r
-// System.Web.Services.Description.ServiceDescriptionImporter.cs\r
-//\r
-// Author:\r
-// Tim Coleman (tim@timcoleman.com)\r
-// Lluis Sanchez Gual (lluis@ximian.com)\r
-//\r
-// Copyright (C) Tim Coleman, 2002\r
-//\r
+//
+// System.Web.Services.Description.ServiceDescriptionImporter.cs
+//
+// Author:
+// Tim Coleman (tim@timcoleman.com)
+// Lluis Sanchez Gual (lluis@ximian.com)
+//
+// Copyright (C) Tim Coleman, 2002
+//
//
// Permission is hereby granted, free of charge, to any person obtaining
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
-\r
-using System;\r
-using System.CodeDom;\r
-using System.CodeDom.Compiler;\r
-using System.Web.Services;\r
-using System.Web.Services.Protocols;\r
-using System.Web.Services.Description;\r
-using System.Xml.Serialization;\r
-using System.Xml;\r
-using System.Xml.Schema;\r
-using System.Collections;\r
-using System.Collections.Specialized;\r
-using System.Configuration;\r
-\r
-namespace System.Web.Services.Description {\r
- public class ServiceDescriptionImporter {\r
-\r
- #region Fields\r
-\r
- string protocolName;\r
- XmlSchemas schemas;\r
- ServiceDescriptionCollection serviceDescriptions;\r
- ServiceDescriptionImportStyle style;\r
- \r
-#if NET_2_0\r
- CodeGenerationOptions options;\r
- ICodeGenerator codeGenerator;\r
- ImportContext context;\r
-#endif\r
-\r
- ArrayList importInfo = new ArrayList ();\r
- \r
-\r
- #endregion // Fields\r
-\r
- #region Constructors\r
- \r
- public ServiceDescriptionImporter ()\r
- {\r
- protocolName = String.Empty;\r
- schemas = new XmlSchemas ();\r
- serviceDescriptions = new ServiceDescriptionCollection ();\r
- style = ServiceDescriptionImportStyle.Client;\r
- }\r
- \r
- #endregion // Constructors\r
-\r
- #region Properties\r
-\r
- public string ProtocolName {\r
- get { return protocolName; }\r
- set { protocolName = value; }\r
- }\r
-\r
- public XmlSchemas Schemas {\r
- get { return schemas; }\r
- }\r
-\r
- public ServiceDescriptionCollection ServiceDescriptions {\r
- get { return serviceDescriptions; }\r
- }\r
-\r
- public ServiceDescriptionImportStyle Style {\r
- get { return style; }\r
- set { style = value; }\r
- }\r
- \r
-#if NET_2_0\r
- [System.Runtime.InteropServices.ComVisible(false)]\r
- public CodeGenerationOptions CodeGenerationOptions {\r
- get { return options; }\r
- set { options = value; }\r
- }\r
- \r
- [System.Runtime.InteropServices.ComVisible(false)]\r
- public ICodeGenerator CodeGenerator {\r
- get { return codeGenerator; }\r
- set { codeGenerator = value; }\r
- }\r
- \r
- \r
- internal ImportContext Context {\r
- get { return context; }\r
- set { context = value; }\r
- }\r
-#endif\r
- \r
- #endregion // Properties\r
-\r
- #region Methods\r
-\r
- public void AddServiceDescription (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)\r
- {\r
- if (appSettingUrlKey != null && appSettingUrlKey == string.Empty && style == ServiceDescriptionImportStyle.Server)\r
- throw new InvalidOperationException ("Cannot set appSettingUrlKey if Style is Server");\r
-\r
- ImportInfo info = new ImportInfo (serviceDescription, appSettingUrlKey, appSettingBaseUrl);\r
- importInfo.Add (info);\r
- serviceDescriptions.Add (serviceDescription);\r
- \r
- if (serviceDescription.Types != null)\r
- schemas.Add (serviceDescription.Types.Schemas);\r
- }\r
-\r
- public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)\r
- {\r
- ProtocolImporter importer = GetImporter ();\r
- \r
- if (!importer.Import (this, codeNamespace, codeCompileUnit, importInfo))\r
- throw new Exception ("None of the supported bindings was found");\r
- \r
- return importer.Warnings;\r
- }\r
- \r
- ProtocolImporter GetImporter ()\r
- {\r
- ArrayList importers = GetSupportedImporters ();\r
- if (protocolName == null || protocolName == "") protocolName = "Soap";\r
- foreach (ProtocolImporter importer in importers) {\r
- if (importer.ProtocolName == protocolName)\r
- return importer;\r
- }\r
- \r
- throw new Exception ("Protocol " + protocolName + " not supported");\r
- }\r
- \r
- ArrayList GetSupportedImporters ()\r
- {\r
- ArrayList list = new ArrayList ();\r
- list.Add (new SoapProtocolImporter ());\r
- list.Add (new HttpGetProtocolImporter ());\r
- list.Add (new HttpPostProtocolImporter ());\r
- return list;\r
- }\r
- \r
-#if NET_2_0\r
-\r
- public static StringCollection GenerateWebReferences (\r
- WebReferenceCollection webReferences, \r
- CodeGenerationOptions options, \r
- ServiceDescriptionImportStyle style, \r
- ICodeGenerator codeGenerator)\r
- {\r
- CodeCompileUnit codeCompileUnit = new CodeCompileUnit ();\r
- return GenerateWebReferences (webReferences, options, style, codeGenerator, codeCompileUnit, false);\r
- }\r
-\r
- [MonoTODO ("verbose?")]\r
- public static StringCollection GenerateWebReferences (\r
- WebReferenceCollection webReferences, \r
- CodeGenerationOptions options, \r
- ServiceDescriptionImportStyle style, \r
- ICodeGenerator codeGenerator, \r
- CodeCompileUnit codeCompileUnit, \r
- bool verbose)\r
- {\r
- StringCollection allWarnings = new StringCollection ();\r
- ImportContext context = new ImportContext (new CodeIdentifiers(), true);\r
- \r
- foreach (WebReference reference in webReferences) \r
- {\r
- ServiceDescriptionImporter importer = new ServiceDescriptionImporter ();\r
- importer.CodeGenerator = codeGenerator;\r
- importer.CodeGenerationOptions = options;\r
- importer.Context = context;\r
- importer.Style = style;\r
- importer.ProtocolName = reference.ProtocolName;\r
- \r
- importer.AddReference (reference);\r
- \r
- reference.Warnings = importer.Import (reference.ProxyCode, codeCompileUnit);\r
- reference.SetValidationWarnings (context.Warnings);\r
- foreach (string s in context.Warnings)\r
- allWarnings.Add (s);\r
-\r
- context.Warnings.Clear ();\r
- }\r
-\r
- return allWarnings;\r
- }\r
- \r
- internal void AddReference (WebReference reference)\r
- {\r
- foreach (object doc in reference.Documents.Values)\r
- {\r
- if (doc is ServiceDescription) {\r
- ServiceDescription service = (ServiceDescription) doc;\r
- ImportInfo info = new ImportInfo (service, reference);\r
- importInfo.Add (info);\r
- serviceDescriptions.Add (service);\r
- \r
- if (service.Types != null)\r
- schemas.Add (service.Types.Schemas);\r
- }\r
- else if (doc is XmlSchema) {\r
- schemas.Add ((XmlSchema) doc);\r
- }\r
- }\r
- }\r
- \r
-#endif\r
-\r
-#endregion\r
- }\r
-\r
- internal class ImportInfo\r
- {\r
- string _appSettingUrlKey;\r
- string _appSettingBaseUrl;\r
- ServiceDescription _serviceDescription;\r
- \r
- public WebReference _reference;\r
- \r
- public ImportInfo (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)\r
- {\r
- _serviceDescription = serviceDescription;\r
- _appSettingUrlKey = appSettingUrlKey;\r
- _appSettingBaseUrl = appSettingBaseUrl;\r
- }\r
- \r
- public ImportInfo (ServiceDescription serviceDescription, WebReference reference)\r
- {\r
- _reference = reference;\r
- _serviceDescription = serviceDescription;\r
- }\r
- \r
- public WebReference Reference {\r
- get { return _reference; }\r
- }\r
- \r
- public ServiceDescription ServiceDescription {\r
- get { return _serviceDescription; }\r
- }\r
- \r
- public string AppSettingUrlKey {\r
- get {\r
- if (_reference != null) return _reference.AppSettingUrlKey;\r
- else return _appSettingUrlKey;\r
- }\r
- set {\r
- _appSettingUrlKey = value;\r
- }\r
- }\r
- \r
- public string AppSettingBaseUrl {\r
- get {\r
- if (_reference != null) return _reference.AppSettingBaseUrl;\r
- else return _appSettingBaseUrl;\r
- }\r
- set {\r
- _appSettingBaseUrl = value;\r
- }\r
- }\r
- }\r
-\r
+
+using System;
+using System.CodeDom;
+using System.CodeDom.Compiler;
+using System.Web.Services;
+using System.Web.Services.Protocols;
+using System.Web.Services.Description;
+using System.Xml.Serialization;
+using System.Xml;
+using System.Xml.Schema;
+using System.Collections;
+using System.Collections.Specialized;
+using System.Configuration;
+using Microsoft.CSharp;
+
+namespace System.Web.Services.Description {
+ public class ServiceDescriptionImporter {
+
+ #region Fields
+
+ string protocolName;
+ XmlSchemas schemas;
+ ServiceDescriptionCollection serviceDescriptions;
+ ServiceDescriptionImportStyle style;
+
+#if NET_2_0
+ CodeGenerationOptions options;
+ CodeDomProvider codeGenerator = new CSharpCodeProvider ();
+ ImportContext context;
+#endif
+
+ ArrayList importInfo = new ArrayList ();
+
+
+ #endregion // Fields
+
+ #region Constructors
+
+ public ServiceDescriptionImporter ()
+ {
+ protocolName = String.Empty;
+ schemas = new XmlSchemas ();
+ serviceDescriptions = new ServiceDescriptionCollection ();
+ serviceDescriptions.SetImporter (this);
+ style = ServiceDescriptionImportStyle.Client;
+ }
+
+ #endregion // Constructors
+
+ #region Properties
+
+ public string ProtocolName {
+ get { return protocolName; }
+ set { protocolName = value; }
+ }
+
+ public XmlSchemas Schemas {
+ get { return schemas; }
+ }
+
+ public ServiceDescriptionCollection ServiceDescriptions {
+ get { return serviceDescriptions; }
+ }
+
+ public ServiceDescriptionImportStyle Style {
+ get { return style; }
+ set { style = value; }
+ }
+
+#if NET_2_0
+ [System.Runtime.InteropServices.ComVisible(false)]
+ public CodeGenerationOptions CodeGenerationOptions {
+ get { return options; }
+ set { options = value; }
+ }
+
+ [System.Runtime.InteropServices.ComVisible(false)]
+ public CodeDomProvider CodeGenerator {
+ get { return codeGenerator; }
+ set { codeGenerator = value; }
+ }
+
+
+ internal ImportContext Context {
+ get { return context; }
+ set { context = value; }
+ }
+#endif
+
+ #endregion // Properties
+
+ #region Methods
+
+ public void AddServiceDescription (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)
+ {
+ if (appSettingUrlKey != null && appSettingUrlKey == string.Empty && style == ServiceDescriptionImportStyle.Server)
+ throw new InvalidOperationException ("Cannot set appSettingUrlKey if Style is Server");
+
+ OnServiceDescriptionAdded (serviceDescription, appSettingUrlKey, appSettingBaseUrl);
+ }
+
+ internal void OnServiceDescriptionAdded (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)
+ {
+ serviceDescriptions.Add (serviceDescription);
+ ImportInfo info = new ImportInfo (serviceDescription, appSettingUrlKey, appSettingBaseUrl);
+ importInfo.Add (info);
+
+ if (serviceDescription.Types != null)
+ schemas.Add (serviceDescription.Types.Schemas);
+ }
+
+ public ServiceDescriptionImportWarnings Import (CodeNamespace codeNamespace, CodeCompileUnit codeCompileUnit)
+ {
+ ProtocolImporter importer = GetImporter ();
+
+ if (!importer.Import (this, codeNamespace, importInfo))
+ throw new Exception ("None of the supported bindings was found");
+
+ return importer.Warnings;
+ }
+
+ ProtocolImporter GetImporter ()
+ {
+ ArrayList importers = GetSupportedImporters ();
+ if (protocolName == null || protocolName == "") protocolName = "Soap";
+ foreach (ProtocolImporter importer in importers) {
+ if (importer.ProtocolName.ToUpper () == protocolName.ToUpper ())
+ return importer;
+ }
+
+ throw new Exception ("Protocol " + protocolName + " not supported");
+ }
+
+ ArrayList GetSupportedImporters ()
+ {
+ ArrayList list = new ArrayList ();
+ list.Add (new SoapProtocolImporter ());
+#if NET_2_0
+ list.Add (new Soap12ProtocolImporter ());
+#endif
+ list.Add (new HttpGetProtocolImporter ());
+ list.Add (new HttpPostProtocolImporter ());
+ return list;
+ }
+
+#if NET_2_0
+
+ [MonoTODO] // where to use Verbose and Extensions in options?
+ public static StringCollection GenerateWebReferences (
+ WebReferenceCollection webReferences,
+ CodeDomProvider codeGenerator,
+ CodeCompileUnit codeCompileUnit,
+ WebReferenceOptions options)
+ {
+ StringCollection allWarnings = new StringCollection ();
+ ImportContext context = new ImportContext (new CodeIdentifiers(), true);
+
+ foreach (WebReference reference in webReferences)
+ {
+ ServiceDescriptionImporter importer = new ServiceDescriptionImporter ();
+ if (codeGenerator != null)
+ importer.CodeGenerator = codeGenerator;
+ importer.CodeGenerationOptions = options.CodeGenerationOptions;
+ importer.Context = context;
+ importer.Style = options.Style;
+ importer.ProtocolName = reference.ProtocolName;
+
+ importer.AddReference (reference);
+
+ reference.Warnings = importer.Import (reference.ProxyCode, codeCompileUnit);
+ reference.SetValidationWarnings (context.Warnings);
+ foreach (string s in context.Warnings)
+ allWarnings.Add (s);
+
+ context.Warnings.Clear ();
+ }
+
+ return allWarnings;
+ }
+
+ internal void AddReference (WebReference reference)
+ {
+ foreach (object doc in reference.Documents.Values)
+ {
+ if (doc is ServiceDescription) {
+ ServiceDescription service = (ServiceDescription) doc;
+ ImportInfo info = new ImportInfo (service, reference);
+ importInfo.Add (info);
+ serviceDescriptions.Add (service);
+
+ if (service.Types != null)
+ schemas.Add (service.Types.Schemas);
+ }
+ else if (doc is XmlSchema) {
+ schemas.Add ((XmlSchema) doc);
+ }
+ }
+ }
+
+#endif
+
+#endregion
+ }
+
+ internal class ImportInfo
+ {
+ string _appSettingUrlKey;
+ string _appSettingBaseUrl;
+ ServiceDescription _serviceDescription;
+
+ public WebReference _reference;
+
+ public ImportInfo (ServiceDescription serviceDescription, string appSettingUrlKey, string appSettingBaseUrl)
+ {
+ _serviceDescription = serviceDescription;
+ _appSettingUrlKey = appSettingUrlKey;
+ _appSettingBaseUrl = appSettingBaseUrl;
+ }
+
+ public ImportInfo (ServiceDescription serviceDescription, WebReference reference)
+ {
+ _reference = reference;
+ _serviceDescription = serviceDescription;
+ }
+
+ public WebReference Reference {
+ get { return _reference; }
+ }
+
+ public ServiceDescription ServiceDescription {
+ get { return _serviceDescription; }
+ }
+
+ public string AppSettingUrlKey {
+ get {
+ if (_reference != null) return _reference.AppSettingUrlKey;
+ else return _appSettingUrlKey;
+ }
+ set {
+ _appSettingUrlKey = value;
+ }
+ }
+
+ public string AppSettingBaseUrl {
+ get {
+ if (_reference != null) return _reference.AppSettingBaseUrl;
+ else return _appSettingBaseUrl;
+ }
+ set {
+ _appSettingBaseUrl = value;
+ }
+ }
+ }
+
}