zoukankan      html  css  js  c++  java
  • Calling the Web Service dynamically (.NET 动态访问Web Service)

    针对.NET平台下的WebService访问,为达到不添加引用的情况下,动态调用外部服务。

    主体方法:

        public class WebServiceHelper
        {
            //Calling the WebService dynamically
            public static T CallWebServiceDynamic<T>(string address, string serviceName, string serviceMethod, object[] args) {
                WebClient client = new WebClient();
                System.IO.Stream stream = client.OpenRead(address);
                ServiceDescription description = ServiceDescription.Read(stream);
    
                ServiceDescriptionImporter importer = new ServiceDescriptionImporter();
                importer.ProtocolName = "Soap12";
                importer.AddServiceDescription(description, null, null);
                importer.Style = ServiceDescriptionImportStyle.Client;
                importer.CodeGenerationOptions = CodeGenerationOptions.GenerateProperties;
    
                CodeNamespace nmspace = new CodeNamespace();
                CodeCompileUnit compileUnit = new CodeCompileUnit();
                compileUnit.Namespaces.Add(nmspace);
                ServiceDescriptionImportWarnings warning = importer.Import(nmspace, compileUnit);
                if ( warning != 0 ) {
                    throw new Exception($"Warning:{warning}");
                }
    
                CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
                string[] assemblyReferences = new string[3] {
                    "System.dll",
                    "System.Xml.dll",
                    "System.Web.Services.dll"
                };
                CompilerParameters parms = new CompilerParameters(assemblyReferences);
                parms.GenerateExecutable = false;
                parms.GenerateInMemory = true;
    
                CompilerResults results = provider.CompileAssemblyFromDom(parms, compileUnit);
                object wsvcClass = results.CompiledAssembly.CreateInstance(serviceName);
                MethodInfo method = wsvcClass.GetType().GetMethod(serviceMethod);
                var data = method.Invoke(wsvcClass, args);
                if ( data != null ) {
                    return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(data));
                }
                return default(T);
            }
        }
    View Code

    使用场景:

    string endPointAddress = ConfigurationManager.AppSettings["xxxxxx"];
    
            public WorkPackageServiceModel[] GetMinimalWorkPackage(Guid projectItemId, string projectNumber) {
                return WebServiceHelper.CallWebServiceDynamic<WorkPackageServiceModel[]>(endPointAddress, "DataCenter", "GetMinimalWorkPackage", new object[] { projectItemId, projectNumber });
            }
    View Code

    That's all!

  • 相关阅读:
    关于返回上一页功能
    Mybatis Update statement Date null
    SQLite reset password
    Bootstrap Validator使用特性,动态(Dynamic)添加的input的验证问题
    Eclipse使用Maven2的一次环境清理记录
    Server Tomcat v7.0 Server at localhost failed to start
    PowerShell一例
    Server Tomcat v7.0 Server at libra failed to start
    商标注册英语
    A glance for agile method
  • 原文地址:https://www.cnblogs.com/kongdf/p/7002496.html
Copyright © 2011-2022 走看看