C# 调用第三方WSDL接口

您所在的位置:网站首页 webservice调用接口时如何传数据 C# 调用第三方WSDL接口

C# 调用第三方WSDL接口

2022-12-09 04:59| 来源: 网络整理| 查看: 265

 

 public static object InvokeWebService02(string url, string methodname, object[] args)         {             //这里的namespace是需引用的webservices的命名空间,也可以加一个参数从外面传进来。             string @namespace = "MyWebserviceTest";              Console.WriteLine("定义命名空间:" + @namespace);             try             {                 Console.WriteLine("开始获取wsdl...");                 //获取WSDL                 WebClient wc = new WebClient();                  Console.WriteLine("开始获取流数据...");                 Stream stream = wc.OpenRead(url + "?wsdl");

                ServiceDescription sd = ServiceDescription.Read(stream);                  Console.WriteLine("格式化流数据...");                 string classname = sd.Services[0].Name;                  Console.WriteLine("获取包含在流中的service集合中service[0].name:" + classname);                 ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();                  Console.WriteLine("建立生成代理类功能类对象的实例...");                 sdi.AddServiceDescription(sd, "", "");                 sdi.ProtocolName = "SOAP";                  Console.WriteLine("配置访问XML的协议为:" + sdi.ProtocolName);                  Console.WriteLine("将流数据加入实例中...");                 CodeNamespace cn = new CodeNamespace(@namespace);                  Console.WriteLine("生成命名空间对象...");

                //生成客户端代理类代码                 CodeCompileUnit ccu = new CodeCompileUnit();                  Console.WriteLine("建立CodeDom容器对象...");                 ccu.Namespaces.Add(cn);                  Console.WriteLine("为容器添加命名空间...");                 sdi.Import(cn, ccu);                  Console.WriteLine("将命名空间和容器导入wsdl流中...");                 CSharpCodeProvider csc = new CSharpCodeProvider();                  Console.WriteLine("建立C#代码生成器和编译器对象...");                 //ICodeCompiler icc = csc.CreateCompiler();                 //设定编译参数                 CompilerParameters cplist = new CompilerParameters();                  Console.WriteLine("设置编译参数...");                 cplist.GenerateExecutable = false;                 cplist.GenerateInMemory = true;                 cplist.ReferencedAssemblies.Add("System.dll");                 cplist.ReferencedAssemblies.Add("System.XML.dll");                 cplist.ReferencedAssemblies.Add("System.Web.Services.dll");                 cplist.ReferencedAssemblies.Add("System.Data.dll");                 //这里的字段OutputAssembly可配置也可不配置,配置后下面的编译器对象将按照配置的路径将wsdl生成.dll文件                 cplist.OutputAssembly = System.IO.Directory.GetCurrentDirectory() + "\\" + classname + ".dll";                  Console.WriteLine("根据编译器对象按照编译参数对象和容器对象设置编译生成代理类对象...");                 //编译代理类                 CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);

                 Console.WriteLine("编译完成...");                  Console.WriteLine("检测编译是否产生错误...");                 if (File.Exists(System.IO.Directory.GetCurrentDirectory() + "\\" + classname + ".dll"))                 {                      Console.WriteLine(classname + ".dll" + "文件生成...");                 }                 if (true == cr.Errors.HasErrors)                 {                     System.Text.StringBuilder sb = new System.Text.StringBuilder();                     foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)                     {                         sb.Append(ce.ToString());                         sb.Append(System.Environment.NewLine);                     }                     throw new Exception(sb.ToString());                 }

                 Console.WriteLine("开始调用编译完的程序集...");                  Console.WriteLine("建立程序集对象...");                 System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom(classname + ".dll");                 Type t = assembly.GetType(@namespace + "." + classname, true, true);                  Console.WriteLine("获取程序集中" + @namespace + "." + classname + "中的类型对象...");                 object obj = Activator.CreateInstance(t);                  Console.WriteLine("建立该对象实例..."+obj);                 System.Reflection.MethodInfo mi = t.GetMethod(methodname);                  Console.WriteLine("获取名为" + methodname + "的方法的信息....\n" + mi.ToString());                  Console.WriteLine("开始调用该方法...");                 return mi.Invoke(obj, args);             }             catch (Exception ex)             {                 Console.WriteLine("WebService调用异常,详细信息如下:{0}", ex.ToString());                 return null;             }         }



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3