Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

System.Web.Services namespace in .net core

I am creating proxy class for SOAP services dynamically where I need System.Web.Services namespace and I am using .NET 5(Core). I am not able to find System.Web.Services namespace in .NET 5, so is it deprecated or moved to another namespace? How can I use classes of System.Web.Services namespace in .NET 5.

Below is code where I need this namespace:

 public class DynamicWSProxy: IDynamicWSProxy
{
    [SecurityPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
    public object CallWebService(string webServiceAsmxUrl, string serviceName, string methodName, object[] args)
    {
        System.Net.WebClient client = new System.Net.WebClient();

        // Connect To the web service
        System.IO.Stream stream = client.OpenRead(webServiceAsmxUrl + "?wsdl");

        // Now read the WSDL file describing a service.
        ServiceDescription description = ServiceDescription.Read(stream);

        ///// LOAD THE DOM /////////

        // Initialize a service description importer.

        ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
        importer.ProtocolName = "Soap12"; // Use SOAP 1.2.
        importer.AddServiceDescription(description, null, null);

        // Generate a proxy client.
        importer.Style = ServiceDescriptionImportStyle.Client;

        // Generate properties to represent primitive values.
        importer.CodeGenerationOptions = System.Xml.Serialization.CodeGenerationOptions.GenerateProperties;

        // Initialize a Code-DOM tree into which we will import the service.
        CodeNamespace nmspace = new CodeNamespace();
        CodeCompileUnit unit1 = new CodeCompileUnit();
        unit1.Namespaces.Add(nmspace);

        // Import the service into the Code-DOM tree. This creates proxy code that uses the service.
        ServiceDescriptionImportWarnings warning = importer.Import(nmspace, unit1);

        if (warning == 0) // If zero then we are good to go
        {

            // Generate the proxy code
            CodeDomProvider provider1 = CodeDomProvider.CreateProvider("CSharp");

            // Compile the assembly proxy with the appropriate references
            string[] assemblyReferences = new string[5] { "System.dll", "System.Web.Services.dll", "System.Web.dll", "System.Xml.dll", "System.Data.dll" };

            CompilerParameters parms = new CompilerParameters(assemblyReferences);

            CompilerResults results = provider1.CompileAssemblyFromDom(parms, unit1);

            // Check For Errors
            if (results.Errors.Count > 0)
            {
                foreach (CompilerError oops in results.Errors)
                {
                    System.Diagnostics.Debug.WriteLine("========Compiler error============");
                    System.Diagnostics.Debug.WriteLine(oops.ErrorText);
                }
                throw new System.Exception("Compile Error Occured calling webservice. Check Debug ouput window.");
            }

            // Finally, Invoke the web service method

            object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName, true);

            MethodInfo mi = wsvcClass.GetType().GetMethod(methodName);

            return mi.Invoke(wsvcClass, args);

        }

        else
        {
            return null;
        }
    }

}
like image 636
jagpal singh Sisodiya Avatar asked Apr 11 '16 09:04

jagpal singh Sisodiya


1 Answers

System.Web.Services is a predecessor of WCF. Since even the mighty WCF is considered deprecated on the server side, do not expect System.Web.Services to be available in .NET Core or the concrete App Model ASP.NET Core 1.0. Their namespaces even start with Microsoft.AspNetCore. SOAP is considered deprecated in favor of REST and JSON. Microsoft will tell you: Use the .NET Framework but not .NET Core.

like image 189
Thomas Avatar answered Sep 22 '22 20:09

Thomas