本文介绍了.net 核心中的 System.Web.Services 命名空间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为需要 System.Web.Services 命名空间的 SOAP 服务动态创建代理类,并且我正在使用 .NET 5(Core).我无法在 .NET 5 中找到 System.Web.Services 命名空间,那么它是否已被弃用或移至另一个命名空间?如何在 .NET 5 中使用 System.Web.Services 命名空间的类.

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;
        }
    }

}

推荐答案

System.Web.Services 是 WCF 的前身.由于即使是强大的 WCF 在服务器端也被视为已弃用,因此不要指望 System.Web.Services 在 .NET Core 或具体的 App Model ASP.NET Core 1.0 中可用.它们的命名空间甚至以 Microsoft.AspNetCore 开头.SOAP 被认为已弃用,而支持 REST 和 JSON.Microsoft 会告诉您:使用 .NET Framework 而不是 .NET Core.

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.

这篇关于.net 核心中的 System.Web.Services 命名空间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-02 11:49