.net动态调用wsdl

 1 public class WebServiceHelper
 2     {
 3         /// <summary>         
 4         /// 动态调用WebService         
 5         /// /// </summary>         
 6         /// /// <param name="url">WebService地址</param>         
 7         /// /// <param name="classname">类名</param>         
 8         /// /// <param name="methodname">方法名(模块名)</param>         
 9         /// /// <param name="args">参数列表</param>         
10         /// /// <returns>object</returns>         
11         public static object InvokeWebService(string url, string classname, string methodname, object[] args)
12         {
13             string @namespace = "Seasky.SFP.Claims.Entity";
14             if (classname == null || classname == "")
15             { classname = WebServiceHelper.GetClassName(url); }
16             //获取服务描述语言(WSDL)             
17             WebClient wc = new WebClient();
18             Stream stream = wc.OpenRead(url + "?WSDL");
19             ServiceDescription sd = ServiceDescription.Read(stream);
20             ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
21             sdi.AddServiceDescription(sd, "", "");
22             CodeNamespace cn = new CodeNamespace(@namespace);
23             //生成客户端代理类代码             
24             CodeCompileUnit ccu = new CodeCompileUnit();
25             ccu.Namespaces.Add(cn);
26             sdi.Import(cn, ccu);
27             CSharpCodeProvider csc = new CSharpCodeProvider();
28             //ICodeCompiler icc = csc;// csc.CreateCompiler();            
29             //设定编译器的参数             
30             CompilerParameters cplist = new CompilerParameters();
31             cplist.GenerateExecutable = false;
32             cplist.GenerateInMemory = true; cplist.ReferencedAssemblies.Add("System.dll");
33             cplist.ReferencedAssemblies.Add("System.XML.dll");
34             cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
35             cplist.ReferencedAssemblies.Add("System.Data.dll");
36             //编译代理类             
37             CompilerResults cr = csc.CompileAssemblyFromDom(cplist, ccu);
38             if (true == cr.Errors.HasErrors)
39             {
40                 System.Text.StringBuilder sb = new StringBuilder();
41                 foreach (CompilerError ce in cr.Errors)
42                 {
43                     sb.Append(ce.ToString());
44                     sb.Append(System.Environment.NewLine);
45                 } throw new Exception(sb.ToString());
46             }
47             //生成代理实例,并调用方法             
48             System.Reflection.Assembly assembly = cr.CompiledAssembly;
49             Type t = assembly.GetType(@namespace + "." + classname, true, true);
50             object obj = Activator.CreateInstance(t);
51             System.Reflection.MethodInfo mi = t.GetMethod(methodname);
52             return mi.Invoke(obj, args);
53         }
54 
55         private static string GetClassName(string url)
56         {
57             string[] parts = url.Split('/'); string[] pps = parts[parts.Length - 1].Split('.'); return pps[0];
58         }
59     }
60 
61     public class keyinfo
62     {
63         public string password { get; set; }
64     }
WebServiceHelper
1 var result = WebServiceHelper.InvokeWebService("http://demo.com/iSignatureServer/services/KeyInfoService", "KeyInfoServiceService", "getKeyinfoByKeySN", new object[] { keySn });
2 var str = JsonConvert.SerializeObject(result);
3 var info = JsonConvert.DeserializeObject<keyinfo>(str);
4 var pwd = info.password;

猜你喜欢

转载自www.cnblogs.com/jxp0202/p/12361048.html