/// <summary>
        /// Process local paths
        /// </summary>
        /// <param name="path"></param>
        /// <param name="discoveryClientProtocol"></param>
        private void ProcessLocal(string path, DiscoveryClientProtocol discoveryClientProtocol)
        {
            string extension = Path.GetExtension(path);

            if (string.Compare(extension, ".discomap", true) == 0)
            {
                discoveryClientProtocol.ReadAll(path);
            }
            else
            {
                object obj = null;
                if (string.Compare(extension, ".wsdl", true) == 0)
                {
                    obj = this.ReadLocalDocument(false, path);
                }
                else
                {
                    if (string.Compare(extension, ".xsd", true) != 0)
                    {
                        throw new InvalidOperationException("Unknown file type " + path);
                    }

                    obj = this.ReadLocalDocument(true, path);
                }

                if (obj != null)
                {
                    this.AddDocument(path, obj);
                }
            }
        }
Exemple #2
0
        private void ProcessLocalPaths(DiscoveryClientProtocol client, StringCollection localPaths, XmlSchemas schemas,
                                       ServiceDescriptionCollection descriptions)
        {
            StringEnumerator enumerator = localPaths.GetEnumerator();

            while (enumerator.MoveNext())
            {
                string current   = enumerator.Current;
                string extension = Path.GetExtension(current);
                if (string.Compare(extension, ".discomap", true) == 0)
                {
                    client.ReadAll(current);
                }
                else
                {
                    object document = null;
                    if (string.Compare(extension, ".wsdl", true) == 0)
                    {
                        document = ReadLocalDocument(false, current);
                    }
                    else
                    {
                        if (string.Compare(extension, ".xsd", true) != 0)
                        {
                            throw new InvalidOperationException("Unknown file type " + current);
                        }
                        document = ReadLocalDocument(true, current);
                    }
                    if (document != null)
                    {
                        AddDocument(current, document, schemas, descriptions);
                    }
                }
            }
        }
Exemple #3
0
 private void ProcessLocalPaths(DiscoveryClientProtocol client, StringCollection localPaths, XmlSchemas schemas,
                                ServiceDescriptionCollection descriptions)
 {
     foreach (string text1 in localPaths)
     {
         string text2 = Path.GetExtension(text1);
         if (string.Compare(text2, ".discomap", true) == 0)
         {
             client.ReadAll(text1);
         }
         else
         {
             object obj1 = null;
             if (string.Compare(text2, ".wsdl", true) == 0)
             {
                 obj1 = ReadLocalDocument(false, text1);
             }
             else
             {
                 if (string.Compare(text2, ".xsd", true) != 0)
                 {
                     throw new InvalidOperationException("Unknown file type " + text1);
                 }
                 obj1 = ReadLocalDocument(true, text1);
             }
             if (obj1 != null)
             {
                 AddDocument(text1, obj1, schemas, descriptions);
             }
         }
     }
 }
Exemple #4
0
    static void Main()
    {
        try
        {
            DiscoveryClientProtocol myDiscoveryClientProtocol =
                new DiscoveryClientProtocol();

            // Get the collection holding DiscoveryClientResult objects.
            DiscoveryClientResultCollection myDiscoveryClientResultCollection =
                myDiscoveryClientProtocol.ReadAll("results.discomap");
            Console.WriteLine("The number of DiscoveryClientResult objects: "
                              + myDiscoveryClientResultCollection.Count);
            Console.WriteLine("Displaying the items in the collection:");

            // Iterate through the collection and display the properties
            // of each DiscoveryClientResult in it.
            foreach (DiscoveryClientResult myDiscoveryClientResult in
                     myDiscoveryClientResultCollection)
            {
                Console.WriteLine(
                    "Type of reference in the discovery document: "
                    + myDiscoveryClientResult.ReferenceTypeName);
                Console.WriteLine("Url for the reference: "
                                  + myDiscoveryClientResult.Url);
                Console.WriteLine("File for saving the reference: "
                                  + myDiscoveryClientResult.Filename);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error is " + e.Message);
        }
    }
Exemple #5
0
        public static DynamicProxyLoader Load(String fileName, String @namespace, DynamicProxyLoaderOptions options)
        {
            @namespace = (@namespace ?? "Hmis_Service_Ref");
            options    = (options ?? new DynamicProxyLoaderOptions());

            var dynamicProxyFactory = ReadCache(fileName);

            if (dynamicProxyFactory != null)
            {
                return(dynamicProxyFactory);
            }

            var proxyClientFileName   = String.Format("{0}.config", fileName);
            var proxyAssemblyFileName = String.Format("{0}.dll", fileName);
            var proxyCodeFileName     = String.Format("{0}.cs", fileName);

            var discoveryClient = new DiscoveryClientProtocol();

            discoveryClient.ReadAll(proxyClientFileName);

            var proxyAssemblyBytes = File.ReadAllBytes(proxyAssemblyFileName);
            var proxyAssemblyCode  = File.ReadAllText(proxyCodeFileName);
            var proxyAssembly      = Assembly.Load(proxyAssemblyBytes);

            dynamicProxyFactory = new DynamicProxyLoader(discoveryClient, proxyAssembly, proxyAssemblyBytes, proxyAssemblyCode, @namespace, options);

            WriteCache(fileName, dynamicProxyFactory);

            return(dynamicProxyFactory);
        }
Exemple #6
0
        ReferenceGroup ConvertMapFile(string mapFile)
        {
            DiscoveryClientResultCollection files;

            using (var prot = new DiscoveryClientProtocol())
                files = prot.ReadAll(mapFile);

            var map = new ReferenceGroup();

            if (refGroup != null)
            {
                map.ClientOptions = refGroup.ClientOptions;
                map.ID            = refGroup.ID;
            }
            else
            {
                map.ClientOptions = defaultOptions;
                map.ID            = Guid.NewGuid().ToString();
            }

            var sources = new Dictionary <string, int> ();

            foreach (DiscoveryClientResult res in files)
            {
                string url = res.Url;
                var    uri = new Uri(url);
                if (!string.IsNullOrEmpty(uri.Query))
                {
                    url = url.Substring(0, url.Length - uri.Query.Length);
                }
                int nSource;
                if (!sources.TryGetValue(url, out nSource))
                {
                    nSource       = sources.Count + 1;
                    sources [url] = nSource;
                    var ms = new MetadataSource();
                    ms.Address  = url;
                    ms.Protocol = uri.Scheme;
                    ms.SourceId = nSource.ToString();
                    map.MetadataSources.Add(ms);
                }
                var file = new MetadataFile();
                file.FileName  = res.Filename;
                file.ID        = Guid.NewGuid().ToString();
                file.SourceId  = nSource.ToString();
                file.SourceUrl = res.Url;
                switch (Path.GetExtension(file.FileName).ToLower())
                {
                case ".disco": file.MetadataType = "Disco"; break;

                case ".wsdl": file.MetadataType = "Wsdl"; break;

                case ".xsd": file.MetadataType = "Schema"; break;
                }
                map.Metadata.Add(file);
            }
            map.Save(mapFile);
            return(map);
        }
        /// <summary>
        /// protocol.ReadAll fails on Mono 4.2 but not on Mono 4.0 since the
        /// generated Reference.map file contains an incorrect filename.
        /// </summary>
        static void ReadReferenceMap(string directory)
        {
            var protocol = new DiscoveryClientProtocol();
            var results  = protocol.ReadAll(Path.Combine(directory, "Reference.map"));

            foreach (DiscoveryClientResult result in results)
            {
                Console.WriteLine(result.Filename);
            }
        }
Exemple #8
0
    static void Main()
    {
        try
        {
            DiscoveryClientProtocol myDiscoveryClientProtocol =
                new DiscoveryClientProtocol();

            // Get the collection of DiscoveryClientResult objects.
            DiscoveryClientResultCollection myDiscoveryClientResultCollection =
                myDiscoveryClientProtocol.ReadAll("results.discomap");
            Console.WriteLine("The number of DiscoveryClientResult objects: "
                              + myDiscoveryClientResultCollection.Count);
            Console.WriteLine("Removing a DiscoveryClientResult "
                              + "from the collection...");

            // Remove first DiscoveryClientResult from the collection.
            myDiscoveryClientResultCollection.Remove
                (myDiscoveryClientResultCollection[0]);
            Console.WriteLine("Adding a DiscoveryClientResult "
                              + "to the collection...");
// <Snippet1>
            // Initialize a new instance of the DiscoveryClientResult class.
            DiscoveryClientResult myDiscoveryClientResult =
                new DiscoveryClientResult(
                    typeof(System.Web.Services.Discovery.DiscoveryDocumentReference),
                    "http://localhost/Discovery/Service1_cs.asmx?disco",
                    "Service1_cs.disco");

            // Add the DiscoveryClientResult to the collection.
            myDiscoveryClientResultCollection.Add(myDiscoveryClientResult);
// </Snippet1>
            Console.WriteLine("Displaying the items in the collection");
            for (int i = 0; i < myDiscoveryClientResultCollection.Count; i++)
            {
                DiscoveryClientResult myClientResult =
                    myDiscoveryClientResultCollection[i];
                Console.WriteLine("DiscoveryClientResult Object " + (i + 1));
                Console.WriteLine("Type of reference in the discovery document: "
                                  + myClientResult.ReferenceTypeName);
                Console.WriteLine("URL for reference: " + myClientResult.Url);
                Console.WriteLine("File for saving the reference: "
                                  + myClientResult.Filename);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Error is " + e.Message);
        }
    }
Exemple #9
0
        private MetadataSet DiscoverMetadataFromMapFile(string file)
        {
            string mapFile = Path.ChangeExtension(file, MapFileExtension);

            using (DiscoveryClientProtocol discovery = new DiscoveryClientProtocol())
            {
                discovery.ReadAll(mapFile);
                MetadataSet metadataSet = new MetadataSet();
                foreach (object document in discovery.Documents.Values)
                {
                    metadataSet.MetadataSections.Add(CreateMetadataSection(document));
                }
                return(metadataSet);
            }
        }
Exemple #10
0
    static void Main()
    {
        try
        {
            DiscoveryClientProtocol myDiscoveryClientProtocol =
                new DiscoveryClientProtocol();

            // Get the collection of DiscoveryClientResult objects.
            DiscoveryClientResultCollection myDiscoveryClientResultCollection =
                myDiscoveryClientProtocol.ReadAll("results.discomap");
            Console.WriteLine(
                "Removing a DiscoveryClientResult from the collection...");

            // Remove the first DiscoveryClientResult from the collection.
            myDiscoveryClientResultCollection.Remove(
                myDiscoveryClientResultCollection[0]);
            Console.WriteLine("Adding a DiscoveryClientResult" +
                              " to the collection...");
            DiscoveryClientResult myDiscoveryClientResult =
                new DiscoveryClientResult();

            // Set the DiscoveryDocumentReference class as the type of
            // reference in the discovery document.
            myDiscoveryClientResult.ReferenceTypeName =
                "System.Web.Services.Discovery.DiscoveryDocumentReference";

            // Set the URL for the reference.
            myDiscoveryClientResult.Url =
                "http://localhost/Discovery/Service1_cs.asmx?disco";

            // Set the name of the file in which the reference is saved.
            myDiscoveryClientResult.Filename = "Service1_cs.disco";

            // Add myDiscoveryClientResult to the collection.
            myDiscoveryClientResultCollection.Add(myDiscoveryClientResult);
            if (myDiscoveryClientResultCollection.Contains(myDiscoveryClientResult))
            {
                Console.WriteLine(
                    "Instance of DiscoveryClientResult found in the Collection");
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error is " + ex.Message);
        }
    }
Exemple #11
0
        public void ReadWriteTest()
        {
            string directory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());

            Directory.CreateDirectory(directory);
            try {
                string url = "http://www.w3schools.com/WebServices/TempConvert.asmx";
                var    p1  = new DiscoveryClientProtocol();
                p1.DiscoverAny(url);
                p1.ResolveAll();

                p1.WriteAll(directory, "Reference.map");

                var p2      = new DiscoveryClientProtocol();
                var results = p2.ReadAll(Path.Combine(directory, "Reference.map"));

                Assert.AreEqual(2, results.Count);
                Assert.AreEqual("TempConvert.disco", results [0].Filename);
                Assert.AreEqual("TempConvert.wsdl", results [1].Filename);
            } finally {
                Directory.Delete(directory, true);
            }
        }
    static void Main()
    {
        try
        {
            DiscoveryClientProtocol myDiscoveryClientProtocol =
                new DiscoveryClientProtocol();

            // Get the collection of DiscoveryClientResult objects.
            DiscoveryClientResultCollection myDiscoveryClientResultCollection =
                myDiscoveryClientProtocol.ReadAll("results.discomap");

            Console.WriteLine("The number of DiscoveryClientResult objects: "
                              + myDiscoveryClientResultCollection.Count);

            Console.WriteLine(
                "Removing a DiscoveryClientResult from the collection...");
// <Snippet1>
            // Remove the first DiscoveryClientResult from the collection.
            myDiscoveryClientResultCollection.Remove(
                myDiscoveryClientResultCollection[0]);
// </Snippet1>
            Console.WriteLine(
                "Adding a DiscoveryClientResult to the collection...");
// <Snippet2>
// <Snippet3>
// <Snippet4>
// <Snippet5>
// <Snippet6>
            // Initialize new instance of the DiscoveryClientResult class.
            DiscoveryClientResult myDiscoveryClientResult =
                new DiscoveryClientResult();

            // Set the type of reference in the discovery document as
            // DiscoveryDocumentReference.
            myDiscoveryClientResult.ReferenceTypeName =
                "System.Web.Services.Discovery.DiscoveryDocumentReference";

            // Set the URL for the reference.
            myDiscoveryClientResult.Url =
                "http://localhost/Discovery/Service1_cs.asmx?disco";

            // Set the name of the file in which the reference is saved.
            myDiscoveryClientResult.Filename = "Service1_cs.disco";

            // Add the DiscoveryClientResult to the collection.
            myDiscoveryClientResultCollection.Add(myDiscoveryClientResult);
// </Snippet6>
// </Snippet5>
// </Snippet4>
// </Snippet3>
// </Snippet2>

// <Snippet7>
            if (myDiscoveryClientResultCollection.Contains(
                    myDiscoveryClientResult))
            {
                Console.WriteLine(
                    "The collection contains the specified " +
                    "DiscoveryClientResult instance.");
            }
// </Snippet7>
            Console.WriteLine("Displaying the items in collection");

// <Snippet8>
            for (int i = 0; i < myDiscoveryClientResultCollection.Count; i++)
            {
                DiscoveryClientResult myClientResult =
                    myDiscoveryClientResultCollection[i];
                Console.WriteLine("DiscoveryClientResult " + (i + 1));
                Console.WriteLine("Type of reference in the discovery document: "
                                  + myClientResult.ReferenceTypeName);
                Console.WriteLine("Url for reference:" + myClientResult.Url);
                Console.WriteLine("File for saving the reference: "
                                  + myClientResult.Filename);
            }
// </Snippet8>
        }
        catch (Exception e)
        {
            Console.WriteLine("Error is " + e.Message);
        }
    }
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            // Only attempt to get the Indigo provider once
            if (!s_triedToGetWebRefType)
            {
                s_indigoWebRefProviderType = BuildManager.GetType(IndigoWebRefProviderTypeName, false /*throwOnError*/);
                s_triedToGetWebRefType     = true;
            }

            // If we have an Indigo provider, instantiate it and forward the GenerateCode call to it
            if (s_indigoWebRefProviderType != null)
            {
                BuildProvider buildProvider = (BuildProvider)HttpRuntime.CreateNonPublicInstance(s_indigoWebRefProviderType);
                buildProvider.SetVirtualPath(VirtualPathObject);
                buildProvider.GenerateCode(assemblyBuilder);
            }

            // e.g "/MyApp/Application_WebReferences"
            VirtualPath rootWebRefDirVirtualPath = HttpRuntime.WebRefDirectoryVirtualPath;

            // e.g "/MyApp/Application_WebReferences/Foo/Bar"
            string currentWebRefDirVirtualPath = _vdir.VirtualPath;

            Debug.Assert(StringUtil.StringStartsWithIgnoreCase(
                             currentWebRefDirVirtualPath, rootWebRefDirVirtualPath.VirtualPathString));

            string ns;

            if (rootWebRefDirVirtualPath.VirtualPathString.Length == currentWebRefDirVirtualPath.Length)
            {
                // If it's the root WebReferences dir, use the empty namespace
                ns = String.Empty;
            }
            else
            {
                // e.g. "Foo/Bar"
                Debug.Assert(rootWebRefDirVirtualPath.HasTrailingSlash);
                currentWebRefDirVirtualPath = UrlPath.RemoveSlashFromPathIfNeeded(currentWebRefDirVirtualPath);
                currentWebRefDirVirtualPath = currentWebRefDirVirtualPath.Substring(
                    rootWebRefDirVirtualPath.VirtualPathString.Length);

                // Split it into chunks separated by '/'
                string[] chunks = currentWebRefDirVirtualPath.Split('/');

                // Turn all the relevant chunks into valid namespace chunks
                for (int i = 0; i < chunks.Length; i++)
                {
                    chunks[i] = Util.MakeValidTypeNameFromString(chunks[i]);
                }

                // Put the relevant chunks back together to form the namespace
                ns = String.Join(".", chunks);
            }
#if !FEATURE_PAL // FEATURE_PAL does not support System.Web.Services
            CodeNamespace codeNamespace = new CodeNamespace(ns);

            // for each discomap file, read all references and add them to the WebReferenceCollection
            WebReferenceCollection webs = new WebReferenceCollection();

            bool hasDiscomap = false;

            // Go through all the discomap in the directory
            foreach (VirtualFile child in _vdir.Files)
            {
                string extension = UrlPath.GetExtension(child.VirtualPath);
                extension = extension.ToLower(CultureInfo.InvariantCulture);

                if (extension == ".discomap")
                {
                    // NOTE: the WebReferences code requires physical path, so this feature
                    // cannot work with a non-file based VirtualPathProvider
                    string physicalPath = HostingEnvironment.MapPath(child.VirtualPath);

                    DiscoveryClientProtocol client = new DiscoveryClientProtocol();
                    client.AllowAutoRedirect = true;
                    client.Credentials       = CredentialCache.DefaultCredentials;

                    client.ReadAll(physicalPath);

                    WebReference webRefTemp = new WebReference(client.Documents, codeNamespace);

                    //

                    string fileName          = System.IO.Path.ChangeExtension(UrlPath.GetFileName(child.VirtualPath), null);
                    string appSetttingUrlKey = ns + "." + fileName;

                    WebReference web = new WebReference(client.Documents, codeNamespace, webRefTemp.ProtocolName, appSetttingUrlKey, null);

                    webs.Add(web);

                    hasDiscomap = true;
                }
            }

            // If we didn't find any discomap files, we have nothing to generate
            if (!hasDiscomap)
            {
                return;
            }

            CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
            codeCompileUnit.Namespaces.Add(codeNamespace);

            //public static StringCollection GenerateWebReferences(WebReferenceCollection webReferences, CodeDomProvider codeProvider, CodeCompileUnit codeCompileUnit, WebReferenceOptions options) {
            WebReferenceOptions options = new WebReferenceOptions();
            options.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties | CodeGenerationOptions.GenerateNewAsync | CodeGenerationOptions.GenerateOldAsync;
            options.Style   = ServiceDescriptionImportStyle.Client;
            options.Verbose = true;
            StringCollection shareWarnings = ServiceDescriptionImporter.GenerateWebReferences(webs, assemblyBuilder.CodeDomProvider, codeCompileUnit, options);
            // Add the CodeCompileUnit to the compilation
            assemblyBuilder.AddCodeCompileUnit(this, codeCompileUnit);
#else // !FEATURE_PAL
            return;
#endif // !FEATURE_PAL
        }
Exemple #14
0
        public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            string str2;

            if (!s_triedToGetWebRefType)
            {
                s_indigoWebRefProviderType = BuildManager.GetType("System.Web.Compilation.WCFBuildProvider", false);
                s_triedToGetWebRefType     = true;
            }
            if (s_indigoWebRefProviderType != null)
            {
                BuildProvider provider = (BuildProvider)HttpRuntime.CreateNonPublicInstance(s_indigoWebRefProviderType);
                provider.SetVirtualPath(base.VirtualPathObject);
                provider.GenerateCode(assemblyBuilder);
            }
            VirtualPath webRefDirectoryVirtualPath = HttpRuntime.WebRefDirectoryVirtualPath;
            string      virtualPath = this._vdir.VirtualPath;

            if (webRefDirectoryVirtualPath.VirtualPathString.Length == virtualPath.Length)
            {
                str2 = string.Empty;
            }
            else
            {
                string[] strArray = UrlPath.RemoveSlashFromPathIfNeeded(virtualPath).Substring(webRefDirectoryVirtualPath.VirtualPathString.Length).Split(new char[] { '/' });
                for (int i = 0; i < strArray.Length; i++)
                {
                    strArray[i] = Util.MakeValidTypeNameFromString(strArray[i]);
                }
                str2 = string.Join(".", strArray);
            }
            CodeNamespace          proxyCode     = new CodeNamespace(str2);
            WebReferenceCollection webReferences = new WebReferenceCollection();
            bool flag = false;

            foreach (VirtualFile file in this._vdir.Files)
            {
                if (UrlPath.GetExtension(file.VirtualPath).ToLower(CultureInfo.InvariantCulture) == ".discomap")
                {
                    string topLevelFilename          = HostingEnvironment.MapPath(file.VirtualPath);
                    DiscoveryClientProtocol protocol = new DiscoveryClientProtocol {
                        AllowAutoRedirect = true,
                        Credentials       = CredentialCache.DefaultCredentials
                    };
                    protocol.ReadAll(topLevelFilename);
                    WebReference reference        = new WebReference(protocol.Documents, proxyCode);
                    string       str5             = Path.ChangeExtension(UrlPath.GetFileName(file.VirtualPath), null);
                    string       appSettingUrlKey = str2 + "." + str5;
                    WebReference webReference     = new WebReference(protocol.Documents, proxyCode, reference.ProtocolName, appSettingUrlKey, null);
                    webReferences.Add(webReference);
                    flag = true;
                }
            }
            if (flag)
            {
                CodeCompileUnit codeCompileUnit = new CodeCompileUnit();
                codeCompileUnit.Namespaces.Add(proxyCode);
                WebReferenceOptions options = new WebReferenceOptions {
                    CodeGenerationOptions = CodeGenerationOptions.GenerateOldAsync | CodeGenerationOptions.GenerateNewAsync | CodeGenerationOptions.GenerateProperties,
                    Style   = ServiceDescriptionImportStyle.Client,
                    Verbose = true
                };
                ServiceDescriptionImporter.GenerateWebReferences(webReferences, assemblyBuilder.CodeDomProvider, codeCompileUnit, options);
                assemblyBuilder.AddCodeCompileUnit(this, codeCompileUnit);
            }
        }